Cron
cron 式パーサー
cron のスケジュールを平易な言葉で読み、次回以降の実行時刻を確認。
5 つのフィールド: 分、時、日、月、曜日。先頭にもう 1 つ加えると秒として解釈されます。
cron 式について
cron 式は、ジョブをいつ実行するかを表す 5 つのフィールド(分、時、日、月、曜日)から成ります。各フィールドには数値、リスト、範囲、あるいは */15 のような間隔を指定できます。簡潔ですが読み違えやすく、とりわけ 2 つの「日」フィールドの組み合わせは多くの人が誤解します。文章と日付で示されたスケジュールを見るほうが、頭で読み解くより速いことがほとんどです。
5 つの数値フィールドに加えて、このツールを支えるパーサーを含む多くの cron 実装は、数字の代わりに月や曜日の 3 文字名(JAN、MON)や、同等の数値表現に展開される @daily、@hourly、@weekly のような一握りの略記も受け付けます。これらは純粋に読みやすさのためのもので、@daily と「0 0 * * *」はまったく同じスケジュールになります。ただし、すべての cron 実装がすべての略記をサポートしているわけではないので、本番環境で頼る前に実際のスケジューラーのドキュメントで確認しておくとよいでしょう。
使われる場面
- crontab の設定をサーバーに反映する前に確認する
- Kubernetes の CronJob や CI パイプラインのスケジュールを読む
- 夜間ジョブが想定外の時刻に動いた原因を調べる
- バックアップや清掃処理のスケジュールを新しく書く
よくある質問
「日」と「曜日」の両方を指定するとどうなりますか?
AND ではなく OR で結合され、どちらか一方に当てはまれば実行されます。つまり「0 0 13 * 5」は毎月 13 日と毎週金曜日に動き、13 日の金曜日だけではありません。cron で最も多い誤解です。
実行時刻のタイムゾーンは何ですか?
UTC です。実際のスケジューラーはマシンやジョブ定義のタイムゾーンを使うため、サーバーが現地時間で動いていれば実際の実行時刻はずれます。ここに表示された時刻に頼る前に、スケジューラーの設定を確認してください。
5 フィールドと 6 フィールドの式はどちらも使えますか?
はい。5 フィールドは分から始まる標準的な Unix cron です。先頭にもう 1 つ加えると秒を表し、Quartz や Spring、いくつかのジョブライブラリはこの形式を想定しています。
数字の代わりに @daily や MON と書けますか?
はい。月や曜日の 3 文字名(JAN、MON など)や、@daily、@hourly、@weekly のような略記はここで受け付けられ、同等の数値フィールドに展開されます。@daily は「0 0 * * *」と同一です。これらは広く使われていますが普遍的ではありません。一部の最小限あるいは組み込み向けの cron 実装は素の 5 フィールドの数値形式しか受け付けないため、本番で略記に頼る前に実際のスケジューラーのドキュメントを確認する価値があります。