0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at
linux

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’
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?