crontabで秒レベルの排他実行を登録する

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
Share:

Related Posts:

0 Comments:

コメントを投稿