cron は、サーバーに「毎日3時にこの処理」「5分ごとにこの確認」といった予定を登録しておき、時間が来たら自動で動かす仕組みです。
ビル管理の自動スケジュールに近いものがあります。朝8時に照明をつける。深夜1時に清掃ロボットを動かす。毎週月曜に点検表を作る。人が毎回指示しなくても、時間になれば決めた作業が始まります。サーバーでは、毎晩のバックアップ、定期レポートや集計の処理、証明書の更新、一時ファイルの掃除、定時のチェックといった仕事を cron に任せます。
設定は、0 3 * * *(毎日3時0分)のような時刻の書き方と、実行するコマンドを1行で並べたものです。何かが起きたときに動くWebhookと違い、cron は「決まった時刻が来たから」動きます。
「動いているはず」がいちばん危ない
毎晩のバックアップは cron に登録したから、もう安心。
失敗しても、cron は何も教えてくれないんだよ。
誰も見ていない夜中に黙って失敗していても、画面には何も出ません。止まっていることに何週間も気づかず、いざバックアップを戻そうとしたら最新のものがなかった、ということが起こりえます。
だから、登録しただけで運用とは考えません。処理ごとにログを残し、失敗したら通知が届くようにしておく。止まっていたときにどう復旧するかも決めておきます。
ほかにも、はまりやすい点がいくつかあります。
- 時刻のタイムゾーン。日本時間のつもりで書いた「3時」が、サーバーの設定では別の時刻になっていることがある
- 重複した実行。前回の処理が終わらないうちに次の回が始まると、同じ処理が並んで動く。時間のかかるバッチでは特に注意
- 秘密情報の書き方。パスワードなどをコマンドへ直接書かず、環境変数や権限の設定と組み合わせる