Crontabに2つのスクリプトをインストールするスクリプトを作成しました。
#!/bin/bash
Sudo crontab -l > mycron
#echo new cron into cron file
echo "*/05 * * * * bash /mnt/md0/capture/delete_old_pcap.sh" >> mycron #schedule the delete script
echo "*/12 * * * * bash /mnt/md0/capture/merge_pcap.sh" >> mycron #schedule the merge script
#install new cron file
crontab mycron
rm mycron
スクリプトが実行され、2行がcrontabに追加されます。しかし、スクリプトを再度実行すると、それらの行が再度追加されるため、同じことを表す4行になります。インストールスクリプトを実行して、crontabに挿入された行が繰り返されないようにしたい。どうやってやるの
crontab
ではなく/etc/cron.d
を使用することをお勧めします。
Crontabエントリのように動作するファイルを/etc/cron.d
に配置できます。形式は少し異なりますが。
例えば/etc/cron.d/pcap
:
*/05 * * * * root bash /mnt/md0/capture/delete_old_pcap.sh
*/12 * * * * root bash /mnt/md0/capture/merge_pcap.sh
形式の違いは、時間指定の後でジョブを実行するユーザーを追加することです。
これで、ファイルが存在するかどうかを簡単に確認できます。上書きしても問題はありません。
cronデーモンに/etc/cron.d
がない可能性があることに注意してください。私はどのcronデーモンがそれを持っているのかわかりませんが、vixie cronはLinuxの標準のcronデーモンであり、そうです
代わりに関数を宣言することができます:
add() {
grep -Fq "$1" mycron || echo "$1" >> mycron
}
次のようにして呼び出します:
add "*/05 * * * * bash /mnt/md0/capture/delete_old_pcap.sh"
これは、ファイルに存在しない場合にのみ行を追加します。
私が使用するbashから
crontab -l | { cat; echo "*/10 * * * * /script/script.sh > /dev/null 2>&1"; } | crontab -
このスクリプトを使用して、リモートサーバーにcronエントリを追加する
cronok="##";
cronok+=`ssh $Host 'crontab -l'`;
pattern="reboot.sh"
if [[ "$cronok" == *${pattern}* ]]; then
echo "found cron at [$Host]"
else
echo "Cron at [$Host] not found adding now"
`ssh $Host 'crontab -l | { cat; echo "*/10 * * * * /root/reboot.sh > /dev/null 2>&1"; } | crontab -'`
echo "finished cron"
fi
スクリプトを作成し、それをcrontabに追加して停止できます。
####You should calculate tiem you want kill your script.
#######code of calculating........
pid=`ps ax |egrep myscript |awk {'print $1'}`
kill -9 $pid
#OR
kill $pid