cron式デコーダー・次回実行時刻の計算
入力
| cron式 | 0 9 * * 1-5 |
|---|
cron式デコーダー・次回実行時刻の計算
5フィールドのPOSIX cron式または@ショートハンドを解析し、スケジュールの説明と次回から3回分のUTC実行時刻を表示します。
入力
cron式
結果
値を入力すると計算結果が表示されます。
スケジュール
次の3回の実行時刻(UTC)
cron式とは
cron式は、Unix系システムで定期タスクをスケジュールするための5フィールド文字列です。スケジューラは1分ごとに現在時刻と5つのフィールドをすべて照合し、すべて一致したときにジョブを起動します。「毎日UTC 9時」「毎週月曜の深夜」「毎月1日の正午」といった複雑なスケジュールも1行で表現できます。
フィールドの構成
フィールドの順序と許容値を以下に示します。
| フィールド | 位置 | 許容値 | 特殊文字 |
|---|---|---|---|
| 分 | 1 | 0〜59 | * / , - |
| 時 | 2 | 0〜23 | * / , - |
| 日 | 3 | 1〜31 | * / , - |
| 月 | 4 | 1〜12 | * / , - |
| 曜日 | 5 | 0〜7(0と7はどちらも日曜日) | * / , - |
特殊文字
*— そのフィールドの全値に一致(「毎時」「毎日」など)*/n— ステップ。n おきの値に一致(例: 分フィールドの*/15= 15分ごと)a-b— 範囲。a 以上 b 以下の全値に一致(例: 曜日フィールドの1-5= 月〜金)a,b,c— リスト。列挙した各値に一致(例: 日フィールドの1,15= 毎月1日と15日)a-b/n— ステップ範囲。例:10-50/10は 10, 20, 30, 40, 50 に一致
よく使われるパターン
| 式 | 意味 |
|---|---|
* * * * * | 毎分 |
*/15 * * * * | 15分ごと |
0 * * * * | 毎時0分 |
0 9 * * 1-5 | 平日のUTC 9:00 |
30 17 * * 5 | 毎週金曜UTC 17:30 |
0 0 1 * * | 毎月1日のUTC 0:00 |
0 0 1 1 * | 毎年1月1日のUTC 0:00 |
0 0 * * 0 | 毎週日曜のUTC 0:00 |
@ショートハンド
多くのcron実装では、以下の省略形が使えます。
| ショートハンド | 展開される式 |
|---|---|
@yearly / @annually | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily / @midnight | 0 0 * * * |
@hourly | 0 * * * * |
日フィールドと曜日フィールドの組み合わせ
日フィールドと曜日フィールドの両方に制限がある場合(どちらも * でない場合)、cron はOR条件で動作します。どちらか一方の条件を満たせばジョブが実行されます。例として:
0 0 1 * 1
これは毎月1日の深夜0時と毎週月曜の深夜0時の両方に発火します。「1日かつ月曜日」の日に絞られるわけではありません。この挙動はPOSIXで規定されており、最も広く使われているVixie cronでも同様に実装されています。
どちらか一方のフィールドのみに制限がある場合、もう一方は無視され、ジョブは制限のあるフィールドの条件だけで実行されます。
スケジューリングの仕組み
スケジューラは1分ごとに現在時刻と5つのフィールドを照合します。すべてのフィールドが一致した場合にジョブが起動されます。最小の実行間隔は1分です。
デフォルトでは、スケジューラは実行を見逃しても遡って補完しません。予定時刻にサーバーがオフラインだった場合、その実行はスキップされます。Kubernetes CronJobには startingDeadlineSeconds 設定があり、一定時間内であれば見逃した実行を回復できます。
タイムゾーンの扱い
ほとんどのcron実装は、サーバーのローカルタイムゾーンでcron式を解釈します。UTCで設定されたサーバーでは、UTC基準の式がそのまま機能します。別のタイムゾーンのサーバーでは、UTCオフセット分だけ実行時刻がずれます。
Kubernetes CronJobとGitHub Actionsのスケジュールはどちらもcron式をUTCで解釈します。この計算機で表示される実行時刻はUTC基準です。別のタイムゾーンのシステムを使っている場合は、そのタイムゾーンのUTCオフセットで換算してください。
よくある質問 (FAQ)
cronの5つのフィールドはそれぞれ何を表しますか?
cron式はスペース区切りの5フィールドで構成されています。順に、分(0〜59)、時(0〜23)、日(1〜31)、月(1〜12)、曜日(0〜7、0と7はどちらも日曜日)です。各フィールドには、特定の値、ワイルドカード()、範囲(1-5)、ステップ(/15)、リスト(1,15)、またはそれらの組み合わせ(1-5/2 など)を指定できます。@yearly、@monthly、@weekly、@daily、@hourly といった@ショートハンドは、対応する5フィールド式に展開されます。
日(dom)と曜日(dow)フィールドはどのように組み合わさりますか?
日フィールドと曜日フィールドの両方に制限がある場合(どちらも * でない場合)、cron はOR条件で動作します。どちらかの条件を満たせばジョブが実行されます。たとえば「0 0 1 * 1」は、毎月1日の深夜0時と毎週月曜日の深夜0時の両方に実行されます。「1日かつ月曜日」の日だけに限定されるわけではありません。どちらか一方のフィールドだけに制限がある場合は、そのフィールドの条件のみが適用されます。
次回実行時刻は自分のタイムゾーンで表示されますか?
この計算機ではすべての実行時刻をUTCで表示しています。LinuxのcrontabやKubernetes CronJob、GitHub Actionsのスケジュールなど、多くのcron実装はサーバーのローカルタイムゾーンまたはUTCでcron式を解釈します。cronデーモンがUTCで動作している場合、ここに表示される時刻はそのまま一致します。別のタイムゾーンで動作している場合は、そのタイムゾーンのUTCオフセット分を加減して換算してください。