crontabのスケジューリング最小単位は分指定だが、秒単位で実行させて、並列処理されては困るときの排他実行の組み方。
10秒おきに排他実行をスケジュールする例
crontab
* * * * * flock -xn /path/to/task.lock -c /path/to/task.sh
* * * * * sleep 10; flock -xn /path/to/task.lock -c /path/to/task.sh
* * * * * sleep 20; flock -xn /path/to/task.lock -c /path/to/task.sh
* * * * * sleep 30; flock -xn /path/to/task.lock -c /path/to/task.sh
* * * * * sleep 40; flock -xn /path/to/task.lock -c /path/to/task.sh
* * * * * sleep 50; flock -xn /path/to/task.lock -c /path/to/task.sh
秒単位の指定
sleep
コマンドで寝かせて遅延実行させる
crontab
# 30秒周期で実行
* * * * * コマンド
* * * * * sleep 30; コマンド
crontab
# 20秒周期で実行
* * * * * コマンド
* * * * * sleep 20; コマンド
* * * * * sleep 40; コマンド
排他制御
flock
ファイルロックで排他制御する。
flock
-xオプション
ファイルロックを取得する。
-nオプション
取得できない場合は終了させる。
-cオプション
実行させるコマンドを渡す。
crontab
* * * * * flock -xn /path/to/task.lock -c ‘/path/to/task.sh’