cron 式とは?
cron 式は、Unix 系スケジューラ(cron、cronie、systemd タイマーの cron 互換モード、Spring Scheduler、Quartz 標準モード、GitHub Actions schedule、Kubernetes CronJob)に対し、いつジョブを実行するかを伝える 5 フィールドの文字列です。例:
*/15 9-17 * * 1-5
空白区切りの 5 フィールド。各フィールドは時間の異なる単位への制約で、5 つの制約が同じ瞬間にすべて満たされたとき式が一致して発火します。
5 つのフィールド
左から順に:
| # | フィールド | 許容値 | 特殊文字 |
|---|---|---|---|
| 1 | 分 | 0-59 | * , - / |
| 2 | 時 | 0-23 | * , - / |
| 3 | 日 | 1-31 | * , - / ? L W |
| 4 | 月 | 1-12(または JAN-DEC) | * , - / |
| 5 | 曜日 | 0-7(0 と 7 は日曜、または SUN-SAT) | * , - / ? L # |
* は「すべての値」——毎分、毎時、毎日。
*/15 9-17 * * 1-5 の意味
*/15— 0、15、30、45 分に発火(0 から 15 分刻み)。9-17— 9 時から 17 時(含む)。* *— 任意の日、任意の月。1-5— 月曜日から金曜日。
合計:月曜から金曜の 09:00、09:15、09:30、09:45、10:00 … 17:45。
よく使う特殊文字 3 つ
,— リスト。1,15,45は 1 分、15 分、45 分。-— 範囲。9-17は 9 時から 17 時(含む)。/— ステップ。*/15は「15 ごと」。範囲と組み合わせて1-30/5(「1 から 30 まで 5 ごと」)も可。
曜日の落とし穴
POSIX cron では 0 と 7 は両方とも日曜。多くの現代的実装は英語の曜日名(SUN、MON など)も受け付けますが、拡張構文は実装ごとに差があります。Quartz と Spring は L(last)、W(weekday)、#(nth)を追加しますが、標準 cron にはありません。システムを跨いで動かすなら、5 フィールドの POSIX 方言に絞ってください。
日 AND 曜日
日と曜日の両方が * でないとき、cron は AND ではなく OR と扱います。つまり 0 0 1 * 1 は「毎月 1 日 OR 任意の月曜」の深夜 0 時であって、「毎月第 1 月曜」ではありません。「第 1 月曜」を表現するには Quartz の # 拡張(0 0 * * 1#1)が必要です。
ツール
ブラウザで動く cron エディタ — 直近 5 回の発火を表示し、各フィールドを検証 — は本サイトの Cron Generator をどうぞ。完全クライアントサイド、登録不要。
サイト全体の「時間、スケジュール、日付計算」まとめは Time and Cron hub を参照。
関連
- ISO 8601 用語集エントリ — cron と自然に組み合わせられる標準日付時刻フォーマット
- C2PA Content Credentials — 直接の関係はありませんが、署名付きメディアを扱う際に知っておくべき用語
- Cron 式早見表 — よく使うスケジュールのパターン集