ジョブの実行は普通cronでやるんだけど。たまに問題になる。
*/5 * * * * /path/to/script
処理に時間がかかるscriptを動かしていると、同時に実行されることがある。(上の例なら5分以内に終わらない場合)
かと言ってlockファイルを作るの面倒だし、TheSchwartzみたいなジョブサーバを使うほどの規模でもない。でもでも同時に動くと困るっていう。
そこでふと思った。今まで出番のなかったatを使ってみようと。
test.sh
## ごにょごにょ何かを行う ## 自分自身をatのキューに登録 echo $0 | at now + 5 minutes
と、こんな感じでscriptの最後で自分自身をatに登録すればいいではないか!これなら、処理が同時に走ることはない。
なーんて思いついたけど、atd、atqを管理することが面倒だということに気付いた。script常駐させて適当にループさせるほうがマシだな。