今更ながらcronの多重起動の防止を調べてみた
システム開発していた際に何度も出てくるcronによる自動実行
多重起動防止として、
1.プロセス監視
2.lockファイルの作成(バッチ処理内で自前で作成)
上記2つを主に使ってきました。
最近作っているシステムで、「ロックファイルはいいんだけど、なんか簡単にできないの〜?できるでしょ?(・ω<)」 と言われちょっと検索してみることに。
するとcentos5からflockってコマンドがあるらしく どうやらそれを使うとcronの設定の中にロック処理を含めることができるらしい。
ということでテストしてみる。
以下のPHPソースでテスト
test.php <?php echo date("Y-m-d H:i:s"); sleep(60); ?>
# vi /etc/crontab ↓中身↓ ------------- * * * * * user /usr/bin/flock -n /tmp/test.lock php -f test.php >> /tmp/test.log 2>&1 -------------
結果・・・・
できた!!!
/var/log/cronの内容
Jun 18 19:35:01 local CROND[5793]: (user) CMD (/usr/bin/flock -n /tmp/test.lock php -f test.php >> /tmp/test.log 2>&1) Jun 18 19:36:01 local CROND[5813]: (user) CMD (/usr/bin/flock -n /tmp/test.lock php -f test.php >> /tmp/test.log 2>&1) Jun 18 19:37:01 local CROND[5816]: (user) CMD (/usr/bin/flock -n /tmp/test.lock php -f test.php >> /tmp/test.log 2>&1)
/tmp/test.logの内容
2015-06-18 19:35:01 2015-06-18 19:37:01
ほんとうごいてないわー。詳しくは見てないけどうごいてないわー。 いいわー。これを使おう。