web-dev-qa-db-ja.com

bashスクリプトを使用したcrontabのインストール

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に挿入された行が繰り返されないようにしたい。どうやってやるの

11
Jishnu U Nair

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デーモンであり、そうです

18
Patrick

代わりに関数を宣言することができます:

add() {
  grep -Fq "$1" mycron || echo "$1" >> mycron
}

次のようにして呼び出します:

add "*/05 * * * * bash /mnt/md0/capture/delete_old_pcap.sh"

これは、ファイルに存在しない場合にのみ行を追加します。

3
devnull

私が使用する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
1
Markus07

スクリプトを作成し、それを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
0
PersianGulf