crontabのスケジューリング最小単位は分指定だが、秒単位で実行させて、並列処理されては困るときの排他実行の組み方。
10秒おきに排他実行をスケジュールする例
* * * * * 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
コマンドで寝かせて遅延実行させる
# 30秒周期で実行
* * * * * コマンド
* * * * * sleep 30; コマンド
# 20秒周期で実行
* * * * * コマンド
* * * * * sleep 20; コマンド
* * * * * sleep 40; コマンド
排他制御
flock
ファイルロックでカーネルリソースを利用してクリティカルセクションを確保する。
この感じWindowsSDKのMutex
とかを思い出す。
flock
-xオプション
ファイルロックを取得する。
-nオプション
取得できない場合は終了させる。
-cオプション
ファイルロックを取得できたら実行させるコマンド。
* * * * * flock -xn /path/to/task.lock -c /path/to/task.sh
0 Comments:
コメントを投稿