Kubernetes の cron スケジュール
Kubernetes の CronJob は spec.schedule で 5 フィールドの cron を読み、実行ごとに Job を作ります。 スケジュールを選ぶと、正確な式、そのまま使える設定、次回の実行時刻がわかります。
スケジュール
- 5 分ごと
*/5 * * * * - 1 時間ごと
0 * * * * - 毎分
* * * * * - 10 分ごと
*/10 * * * * - 15 分ごと
*/15 * * * * - 30 分ごと
*/30 * * * * - 毎日 0 時
0 0 * * * - 毎日 9 時
0 9 * * * - 平日 9 時
0 9 * * 1-5 - 毎週月曜日
0 0 * * 1 - 毎月 1 日
0 0 1 * * - 6 時間ごと
0 */6 * * * - 毎週日曜日 0 時
0 0 * * 0 - 2 時間ごと
0 */2 * * * - 12 時間ごと
0 */12 * * * - 毎日 12 時
0 12 * * * - 毎週金曜日
0 0 * * 5 - 毎月末日変換不可
- 四半期ごと
0 0 1 */3 * - 2 分ごと
*/2 * * * * - 3 時間ごと
0 */3 * * * - 毎日 6 時
0 6 * * * - 毎日 18 時
0 18 * * * - 1 日 2 回
0 */12 * * * - 平日 18 時
0 18 * * 1-5 - 週末 10 時
0 10 * * 0,6 - 毎月 15 日
0 0 15 * * - 毎月第 1 月曜日変換不可
- 毎月最終金曜日変換不可
- 年 1 回
0 0 1 1 * - 30 秒ごと変換不可
- 3 分ごと
*/3 * * * * - 20 分ごと
*/20 * * * * - 4 時間ごと
0 */4 * * * - 8 時間ごと
0 */8 * * * - 毎日 1 時
0 1 * * * - 毎日 2 時
0 2 * * * - 毎日 3 時
0 3 * * * - 毎日 8 時
0 8 * * * - 毎平日
0 0 * * 1-5 - 毎週末
0 0 * * 0,6 - 毎週火曜日
0 0 * * 2 - 毎週水曜日
0 0 * * 3 - 毎週木曜日
0 0 * * 4 - 毎週土曜日
0 0 * * 6 - 6 か月ごと
0 0 1 */6 * - 10 秒ごと変換不可
- 5 秒ごと変換不可
Kubernetes の注意点
曜日は 0〜6パーサーの上限は 6 です。日曜日は 0 と書きます。7 はエラーです。
取りこぼしが多すぎると止まるCronJob が 100 回以上起動を逃すと、コントローラーは起動しなくなります。startingDeadlineSeconds を設定して古い取りこぼしを数えないようにします。
実行が重なるconcurrencyPolicy の既定は Allow なので、遅い Job が次の回と重なることがあります。Forbid か Replace を使います。
日付フィールドの */n は「指定あり」制限なしと見なされるのは * か ? だけです。0 0 */2 * 1 は奇数日または月曜日に実行されますが、Vixie cron では奇数日かつ月曜日と解釈されます。
Kubernetes との相互変換
Kubernetes の cron を crontab に変換crontab の cron を Kubernetes に変換Kubernetes の cron を GitHub Actions に変換GitHub Actions の cron を Kubernetes に変換Kubernetes の cron を AWS EventBridge に変換AWS EventBridge の cron を Kubernetes に変換Kubernetes の cron を Spring に変換Spring の cron を Kubernetes に変換Kubernetes の cron を Quartz に変換Quartz の cron を Kubernetes に変換
よくある質問
Kubernetes のスケジュールはどのタイムゾーンで動きますか?
spec.timeZone がなければ kube-controller-manager のローカルタイムゾーン(多くは UTC)です。spec.timeZone(Kubernetes 1.27 で安定版)に IANA 名を設定します。schedule 内の CRON_TZ や TZ は拒否されます。
CronJob は @daily に対応していますか?
対応しています。spec.schedule で @yearly、@monthly、@weekly、@daily、@hourly が使えます。
CronJob が 2 回動いた、または動かなかったのはなぜですか?
CronJob は予定時刻ごとにおおよそ 1 つの Job を作るもので、ちょうど 1 回は保証しません。Job を繰り返しても安全にし、startingDeadlineSeconds と concurrencyPolicy を確認してください。