毎日の処理を忘れずに動かすcron

cron は、決まった時刻や周期でコマンドを自動実行するための定期実行の仕組みです。

cron は、サーバーに「毎日3時にこの処理」「5分ごとにこの確認」といった予定を登録しておき、時間が来たら自動で動かす仕組みです。

ビル管理の自動スケジュールに近いものがあります。朝8時に照明をつける。深夜1時に清掃ロボットを動かす。毎週月曜に点検表を作る。人が毎回指示しなくても、時間になれば決めた作業が始まります。サーバーでは、毎晩のバックアップ、定期レポートや集計の処理、証明書の更新、一時ファイルの掃除、定時のチェックといった仕事を cron に任せます。

設定は、0 3 * * *(毎日3時0分)のような時刻の書き方と、実行するコマンドを1行で並べたものです。何かが起きたときに動くWebhookと違い、cron は「決まった時刻が来たから」動きます。

「動いているはず」がいちばん危ない

Tatoediaの読者モブ
読者さん

毎晩のバックアップは cron に登録したから、もう安心。

Tatoediaの案内役
案内役

失敗しても、cron は何も教えてくれないんだよ。

誰も見ていない夜中に黙って失敗していても、画面には何も出ません。止まっていることに何週間も気づかず、いざバックアップを戻そうとしたら最新のものがなかった、ということが起こりえます。

だから、登録しただけで運用とは考えません。処理ごとにログを残し、失敗したら通知が届くようにしておく。止まっていたときにどう復旧するかも決めておきます。

ほかにも、はまりやすい点がいくつかあります。

  • 時刻のタイムゾーン。日本時間のつもりで書いた「3時」が、サーバーの設定では別の時刻になっていることがある
  • 重複した実行。前回の処理が終わらないうちに次の回が始まると、同じ処理が並んで動く。時間のかかるバッチでは特に注意
  • 秘密情報の書き方。パスワードなどをコマンドへ直接書かず、環境変数や権限の設定と組み合わせる