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


11

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


あなたの目的が何なのか分かりませんか?そもそもなぜスクリプトを作成したのですか?、元の投稿の情報を編集して追加してください。tks
X Tian

回答:


18

/etc/cron.d以上の使用をお勧めしcrontabます。

/etc/cron.dcrontabエントリのように動作するファイルを配置できます。形式は少し異なりますが。

たとえば、
/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デーモンです。


3

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

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

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

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

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


grep -Fq "$ 1"の機能を教えていただけますか?
Jishnu U Nair 2014

そして、スクリプトはエラーgrepを与えます:入力ファイル `mycron 'も出力です
Jishnu U Nair

@JishnuUNair -Fgrep、パターンを固定文字列として解釈します。
devnull 14

@JishnuUNair上記のテキストを正しくコピーしましたか?
devnull 14

はい、正しくコピーしました。
Jishnu U Nair 2014

1

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

0

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

3
これは質問の答えにはなりません。また、kill -9最後の手段としてのみ行われるべきである- unix.stackexchange.com/questions/8916/...
グレアム・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.