O script Bash não está funcionando como cron job

4

Eu tenho o seguinte script de shell

$cat capture.sh 
TIME=$(date +"%H-%M-%d-%m-%y") 
IP="203.208.198.29" 
PREFIX=$TIME$IP 
tshark  -f "udp" -i eth0 -w /root/captures/$PREFIX.cap& 
pid=$! 
sleep 2m 
kill $pid 

ele roda bem quando eu o executo a partir do shell.

mas quando eu adicioná-lo à aba cron nada acontece.

minha entrada no crontab:     1 * / 2 * 2 3,4,5 sh /root/capture.sh

tail /var/log/cron 

mostra que o comando foi executado.

mas nada acontece. Eu configurei permissão executável para "all" para capture.sh e permissão de gravação para "all" para o diretório / root / captures.

Obrigado antecipadamente

    
por CodeBladeRunner 01.02.2012 / 20:53

4 respostas

30

Sua variável PATH provavelmente não é o que você espera dentro do cron.

Use caminhos completos para cada executável no seu script ou defina o caminho manualmente no seu crontab ou no script.

Além disso, uma maneira melhor de interromper seu tshark seria usar a funcionalidade incorporada:

   -a  <capture autostop condition>
       duration:value Stop writing to a capture file after value seconds
       have elapsed.

Além disso, # 2: adicione uma linha shebang ( #! )

    
por 01.02.2012 / 20:57
3

O Cron limitará o caminho usado pelos trabalhos agendados. Tente / usr / sbin / tshark em vez de apenas tshark. Você pode verificar onde o tshark está por meio de which tshark

    
por 01.02.2012 / 20:59
1

Olhando para o seu script, vejo que você está tentando capturar o tráfego por dois minutos e gravar um arquivo. Você realmente queria ter um cronjob que seja executado em todas as qua / quintas / sextas-feiras de fevereiro, a cada duas horas, às 1 da manhã? Eu estou supondo que você queria que ele fosse executado a cada 2 minutos ...

De crontab(5) (que pode ser lido com man 5 crontab )

   cron(8) examines cron entries once every minute.

   The time and date fields are:

          field          allowed values
          -----          --------------
          minute         0-59
          hour           0-23
          day of month   1-31
          month          1-12 (or names, see below)
          day of week    0-7 (0 or 7 is Sun, or use names)

   A field may be an asterisk (*), which always stands for "first-last".
    
por 02.02.2012 / 00:21
0

Porque o comando tshark não foi encontrado, você tem duas opções para corrigi-lo.

  1. define o caminho no crontab

    PATH = $ PATH: / caminho-para-tshark

    * / 2 * 2 3,4,5 sh /root/capture.sh

  2. Use o caminho completo do tshark no seu script.

    a opção # 1 é a maneira preferida

por 03.02.2012 / 02:22