web-dev-qa-db-ja.com

Bashスクリプトがcronジョブとして機能していません

私は次のシェルスクリプトを持っています

$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 

シェルから実行すると正常に動作します。

しかし、それをcronタブに追加しても、何も起こりません。

私のcrontabエントリ:1 */2 * 2 3,4,5 sh /root/capture.sh

tail /var/log/cron 

コマンドが実行されたことを示します。

しかし、何も起こりません。私はcapture.shの「all」に実行可能権限を設定し、/ root/capturesディレクトリの「all」に書き込み権限を設定しました。

前もって感謝します

4
CodeBladeRunner

PATH変数は、おそらくcron内にあると期待するものではありません。

スクリプト内の各実行可能ファイルへのフルパスを使用するか、crontabまたはスクリプトでパスを手動で設定します。

また、tsharkを停止するためのより良い方法は、組み込みの機能を使用することです。

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

また#2:シバンラインを追加します(#!

30
Pauska Sock

Cronは、cronジョブで使用されるパスを制限します。 tsharkだけでなく/ usr/sbin/tsharkを試してください。 which tsharkを介してtsharkがどこにあるかを確認できます

3
becomingwisest

スクリプトを見ると、トラフィックを2分間キャプチャして、ファイルを書き込もうとしていることがわかります。 2月の毎週水/木/金曜日に1時間おきに1時間おきに実行されるcronジョブがあるということですか? 2分ごとに実行したかったと思います...

crontab(5)から(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".
1
Kyle Smith

Tsharkコマンドが見つからなかったため、修正するには2つのオプションがあります。

  1. crontabでパスを定義する

    PATH = $ PATH:/ path-to-tshark

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

  2. スクリプトでtsharkのフルパスを使用します。

    オプション#1が推奨される方法です

0
honglus