cron 等でコマンド実行の排他制御を行う

個人的によく使うのだけれど、案外、周りで使われていないようなので、書いときます。

例えば、下記のような感じで crontab を書いた場合
setlock は毎分実行されるが、sleep は毎時実行される。

*/1 * * * * /usr/local/bin/setlock -nx /tmp/hoge.lock sleep 3600

setlock は、 /tmp/hoge.lock をロック可能であればロックして、sleep を実行する。
/tmp/hoge.lock が存在しなれば、新規に作成する。
-n オプションが付いているので、ロックに失敗した場合は、ロック可能になるまで待たずに終了する。