私は次のシェルスクリプトを持っています
$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」に書き込み権限を設定しました。
前もって感謝します
PATH
変数は、おそらくcron内にあると期待するものではありません。
スクリプト内の各実行可能ファイルへのフルパスを使用するか、crontabまたはスクリプトでパスを手動で設定します。
また、tshark
を停止するためのより良い方法は、組み込みの機能を使用することです。
-a <capture autostop condition>
duration:value Stop writing to a capture file after value seconds
have elapsed.
また#2:シバンラインを追加します(#!
)
Cronは、cronジョブで使用されるパスを制限します。 tsharkだけでなく/ usr/sbin/tsharkを試してください。 which tshark
を介してtsharkがどこにあるかを確認できます
スクリプトを見ると、トラフィックを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".
Tsharkコマンドが見つからなかったため、修正するには2つのオプションがあります。
crontabでパスを定義する
PATH = $ PATH:/ path-to-tshark
*/2 * 2 3,4,5 sh /root/capture.sh
スクリプトでtsharkのフルパスを使用します。
オプション#1が推奨される方法です