汎用的に使える多重起動防止用スクリプトについて共有させていただきます。
使用イメージ
$ ./rej.pl -k test -c "sleep 10" &
[1] 26343
$ ./rej.pl -k test -c "sleep 3"
rej : 2015-02-13 11:27:14 : sleep 3
[1]+ 終了 ./rej.pl -k test -c "sleep 10"
上記の例は、test というキーを指定して sleep コマンドを実行し、1回めのコマンドが終了しないうちに2回めのコマンドを実行すると多重起動が防止(reject)される様子を表しています。
クーロンでの使用イメージ
REJ=/home/kokoromati/util/rej.pl
REJLOG=/home/kokoromati/log/rej
* * * * * $REJ -k hoge -c /home/kokoromati/hoge.sh >> $REJLOG/stdo_hoge.log 2>&1
作成動機
シェルスクリプトなどをクーロンで定時実行させる場合、そのシェルスクリプトごとに多重起動防止の機能を毎回入れるのは面倒なので作りました。
そのほかの特徴
その1:ログが意外と便利
クーロンなどで定時実行されているコマンドは、いつ起動されていつ終了しているのか、そして多重起動防止が働いたのか否かなど、特別に記録をとるようにしない限りよくわからず見通しが悪いです。そのてん当スクリプトを使うと勝手にログを記録してくれるので調査の時に意外と役にたったりします。
$ ./rej.pl -k test | tail
inf : 2014-08-31 21:28:53 : AbEnd clear ...
in : 2014-08-31 21:28:55 : sleep 3
out : 2014-08-31 21:28:56 : sleep 3 (2)
inf : 2014-08-31 21:28:56 : AbEnd alarm !!!
in : 2015-02-13 11:27:08 : sleep 10
rej : 2015-02-13 11:27:14 : sleep 3
out : 2015-02-13 11:27:18 : sleep 10 (0)
inf : 2015-02-13 11:27:18 : AbEnd clear ...
その2:異常終了時のメール機能が便利
定時実行させている処理が異常終了すると大概困ります。その異常終了をメールで知らせてくれるので便利です。異常終了が連続している場合、毎回メールを飛ばすのはそれまた困るので、メールを送るのは初回のみです。