【くろんじょぶ】
cronジョブ とは?
最終更新:
💡 「毎日3時にバックアップ」のような定期作業を自動で動かす仕組み
Unix系OSのcronに登録して、決まった日時や間隔で自動実行するコマンドやスクリプト。バックアップや集計処理の自動化に使われる。
📌 このページのポイント
ペンギン先生、crontabってどう書くの?
「5分ごと」はどう書くの?
「*/5 * * * *」と書くよ。/nは「範囲の中でn刻み」という指定だね。ただしPOSIXの標準にはない拡張で、多くのcron実装が対応している書き方なんだ。刻みはそのフィールドの中だけで数えるから、分に*/35と書くと「35分ごと」ではなく、毎時0分と35分になるよ。
手で打つと動くのに、cronだと動かないことがあるって本当?
時刻がずれて動くこともあるの?
あるよ。時刻の基準は、cronを動かしているサーバー側の設定だよ。サーバーがUTCなら、日本時間とは9時間ずれるね。cronieのように、CRON_TZでタイムゾーンを指定できる実装もある。GitHub ActionsのscheduleはUTCが既定で、最短5分間隔、混雑時は遅れることもあるよ。
cronの代わりになる仕組みはある?
Linuxならsystemdのtimerユニットが使えるよ。Persistent=trueにすると、電源が切れていて逃した実行を、起動後にまとめて1回行えるんだ。KubernetesにはCronJobリソースがあって、AWSのEventBridge SchedulerやGoogle CloudのCloud Schedulerもcron形式でスケジュールを書ける。依存関係の多い処理なら、ワークフローエンジンを検討しよう。
もっと詳しく知りたい人へ
date +%Y%m%d を含むコマンドが、cronだと途中で切れてしまうのはなぜ?
crontabのコマンド欄では、%が改行として扱われるからだよ。最初の%より後ろは、コマンドの標準入力として渡されてしまう。date +\%Y\%m\%d のように%の前にバックスラッシュを付けるか、処理をスクリプトファイルにまとめて、そのファイルを呼び出そう。
「日」と「曜日」を両方指定すると、両方に当てはまる日だけ動くの?
POSIXの仕様では逆で、どちらかに当てはまれば動くよ。たとえば「30 4 1,15 * 5」は、毎月1日と15日の4時30分に加えて、毎週金曜日の4時30分にも実行される。「13日の金曜日だけ」のような条件は、スクリプトの中で曜日を確認しよう。
まとめ:ざっくりこれだけ覚えればOK!
「cronジョブ」って出てきたら「決まった時刻に自動で実行される作業」と思えればだいたいOK!
📖 おまけ:英語の意味
「Cron Job」 = cronが実行するジョブ(仕事)
💬 cronというスケジューラーが実行する「ジョブ(仕事)」という意味だよ。予定はcrontab(cron table)という表に書くんだ