ぽんぽんぽぽぽん

”ぽん”が色々書きます。(ITのことや、ソシャゲ、スロットのこととかw...etc)

今更ながら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

ほんとうごいてないわー。詳しくは見てないけどうごいてないわー。 いいわー。これを使おう。