cron式パーサー

形式: 分 時 日 月 曜日

引き継いだcrontabが0 */2 * * 1-515 4 1 * **/30 8-18 * * *だらけ、ということがあります。このパーサーは、標準の5フィールドcron式を受け取り、わかりやすい英語の説明(「every 2 hours on weekdays」)と、実際に発火する次の5回の時刻を返します。レガシーなスケジュールを理解したり、デプロイ前に新しいものを検証したりするのに便利です。

cron式を解析する方法

  1. 1

    式を貼り付ける

    標準の5フィールド式(`* * * * *`):分、時、日(月内)、月、曜日です。

  2. 2

    英語の説明を読む

    パーサーが各フィールドをわかりやすい英語に書き換えます。例:「At minute 0, every 2 hours, on day(s) of week 1-5.」

  3. 3

    次回実行のプレビューで検証

    今後の発火時刻が5回分。意図と合わなければ式を調整します。

  4. 4

    無効なフィールドを修正する

    フィールド数が違う式や範囲外の値はエラーで拒否され、問題のフィールドが示されます。

各フィールドの解読

各フィールドには独自の有効範囲と特殊文字があります。

フィールド 範囲 使用できるワイルドカード
0-59 * , - /
0-23 * , - /
日(月内) 1-31 * , - /
1-12 * , - /
曜日 0-7 * , - /
  • * = すべての値(分フィールドの*は毎分を意味します)。
  • 1,5,10 = 値のリスト。
  • 1-5 = 値の範囲。
  • */15または0-45/15 = ステップ。フィールドの範囲の先頭から数えます。
  • 曜日の07はどちらも日曜日なので、どちらの慣習でも受け付けます。JANやMONのような月・曜日の名前は受け付けないので、数字を使ってください。

解読した例

英語での説明
0 */2 * * 1-5 At minute 0 every 2 hours, Monday through Friday
15 4 1 * * At 04:15 on the 1st day of every month
*/30 8-18 * * * Every 30 minutes between 08:00 and 18:59
0 0 1,15 * * At midnight on the 1st and 15th of every month
0 22 * * 0 At 22:00 every Sunday

パーサーが受け付けるもの

  • ちょうど5フィールド:分、時、日(月内)、月、曜日。秒や年を含む6〜7フィールドのQuartz式は拒否されます。
  • 有効な範囲:各値は自分のフィールドの範囲内である必要があります(分0-59、時0-23、日(月内)1-31、月1-12、曜日0-7など)。
  • 正のステップ/の後は正の数でなければなりません(*/0は拒否されます)。
  • 名前付きショートカットなし@daily@rebootなどのショートカットは受け付けません。先に5フィールド形式へ展開してください(例:@daily = 0 0 * * *)。

日(月内)と曜日の組み合わせ

日(月内)と曜日の両方が指定された場合、このパーサーは両方が一致するときだけ実行を予定します。つまり0 0 1 * MONは、1日が月曜日に当たるときだけ発火します。多くのLinux cron実装はこの2つのフィールドをORとして扱う(どちらかが一致すれば実行される)ため、実際に使うスケジューラーに合わせて式を確認してください。

タイムゾーンの注意

プレビューの時刻はサーバーの時計(UTC)で計算されます。crontabが別のタイムゾーンのマシンで動いている場合、ここに表示される時刻はそのマシンの時刻と異なることがあります。

よくある質問

いいえ。標準の5フィールド式のみ受け付けます。秒を含む(6フィールド)または年を含む(7フィールド)Quartz式はエラーで拒否されます。

通常は次のいずれかです:プレビューがサーバーの時計(UTC)を使うのに対し、crontabが別のタイムゾーンで動いている、日(月内)と曜日の両方が指定されている(このパーサーは両方の一致を要求します)、またはステップ値が各時・各日の先頭でリセットされることによるものです。

できます。Kubernetesが使うのは標準の5フィールド式(既定でUTC)だからです。ただし、ここのプレビューはサーバーの時計(UTC)を使う点に注意してください。クラスターが別のタイムゾーンで動いていると、時刻が異なることがあります。

Linuxのcronは名前付きのショートカットを受け付けます:@reboot(起動時)、@yearly / @annually(0 0 1 1 *)、@monthly@weekly@daily@hourly。このパーサーは受け付けないため、ショートカットを等価な5フィールド式に展開してから貼り付けてください。

関連ツール