同時に実行されると困るジョブを定期的に実行する - atd編

ジョブの実行は普通cronでやるんだけど。たまに問題になる。

*/5 * * * * /path/to/script 

処理に時間がかかるscriptを動かしていると、同時に実行されることがある。(上の例なら5分以内に終わらない場合)

かと言ってlockファイルを作るの面倒だし、TheSchwartzみたいなジョブサーバを使うほどの規模でもない。でもでも同時に動くと困るっていう。

そこでふと思った。今まで出番のなかったatを使ってみようと。

test.sh

## ごにょごにょ何かを行う

## 自分自身をatのキューに登録
echo $0 | at now + 5 minutes

と、こんな感じでscriptの最後で自分自身をatに登録すればいいではないか!これなら、処理が同時に走ることはない。

なーんて思いついたけど、atd、atqを管理することが面倒だということに気付いた。script常駐させて適当にループさせるほうがマシだな。