平日の 9 時
- 入力
- 0 9 * * 1-5
- 結果
- 月〜金 09:00
曜日は 0〜6 で日曜が 0 です。0 と 7 のどちらも日曜として扱われます。
cron 式を貼り付けると、実際にいつ実行されるかを表示します。各フィールドを分解して説明し、スケジューラが使うタイムゾーンを基準に実行時刻を計算します。cron の事故の多くはまさにこのタイムゾーンから生まれます。
よく使うスケジュール
| フィールド | 値 | 一致する値 |
|---|---|---|
| 分 | 0 | 0 |
| 時 | 9 | 9 |
| 日 | * | すべての値 |
| 月 | * | すべての値 |
| 曜日 | 1-5 | 月, 火, 水, 木, 金 |
すべてブラウザ内で処理されます. このページは静的ファイルです。入力した内容はタブの中だけに留まり、サーバーへ送信されることはなく、閉じれば消えます。実際のトークンや設定を貼り付けても安全です。
30 2 * * 0 の意味を誰も覚えていないとき。曜日は 0〜6 で日曜が 0 です。0 と 7 のどちらも日曜として扱われます。
間隔は指定した範囲の中だけに適用されるため、夜通し動かず 18:45 で止まります。
2 つの日付フィールドを両方指定すると、cron は AND ではなく OR として扱います。
timeZone を指定していない Kubernetes CronJob はコントローラーのタイムゾーン、通常は UTC に従います。09:00 と書くと日本時間の 18:00 に動きます。
間隔は 0 から範囲全体を分割します。時フィールドの */5 は 0, 5, 10, 15, 20 時であって、今から 5 時間ごとではありません。
両方を絞ると実行回数は減るどころか増えます。和集合が欲しいのでなければ、どちらかを * のままにしてください。
標準の Unix cron と Kubernetes CronJob は 5 個で、分・時・日・月・曜日の順です。AWS EventBridge は年フィールドが加わって 6 個になり、2 つの日付フィールドのどちらかに ? を要求します。Quartz は先頭に秒が付いて 6〜7 個です。
spec.timeZone を設定しないと kube-controller-manager のタイムゾーン、通常は UTC で解釈されます。明示的に指定するか、UTC 基準で書いてその旨をドキュメントに残してください。
0 0 * * *、つまり毎日午前 0 時の短縮形です。ほかに @hourly、@weekly、@monthly、@yearly があります。@reboot だけは性質が異なり、起動時に実行され決まった時刻を持ちません。