依存関係があるcron jobのロックファイルを作る便利関数
ニュース - アフラックのシステム障害、原因は「バッチ処理の突き抜け」:ITpro
今更ですがふとこんなニュースを見かけて思い出したので。
まぁバッチ処理の突き抜けとは関係なくて、処理を確実に遂行するためのノウハウとかではないし、単にロックファイルの話です。
- 処理を開始したらロックファイルを作る
- ロックファイルが存在していたらexit & アラート
- powered by cronlog
- 無事ロックファイルを作成できたら、依存するバッチ処理のロックファイルがなくなるまでブロックする
- 長期間(3日間)ブロックし続けていたらkill children & exit & アラート
- 今考えるとkillしなくてもいいかも...*1
こんな事をしてくれるシェル関数を定義したスクリプト(/path/to/shell-function)をどこかに置いて、cronのスクリプトで使ってます。
cronから呼び出すスクリプトはこんな感じ。
. /path/to/shell-function invoke_script --depends=backup backup-report /path/to/script
依存するjobがないjobの場合はシンプルにこんな感じ。
. /path/to/shell-function invoke_script backup /path/to/script
このinvoke_scriptはこんな関数。
set -eなシェルスクリプトから呼び出されても死なないよう作ってあります。*2
引数が不正な時もexit 1する等修正
cron jobの依存関係とかロックファイルとか、その他cron jobスクリプト書く時に面倒な決まり事って皆さんどんな工夫してるのか教えてください。