cron 式ジェネレーター
cron スケジュールを作成してわかりやすい言葉で説明し、次回の実行日時を表示します。 処理はすべて端末内で完結し、アップロードは一切ありません。
- 入力
- Cron expression · schedule picker
- 出力
- Plain-language schedule · next run times
* すべて · , 列挙 · - 範囲 · / 間隔 · JAN–DEC と SUN–SAT の名前 · 7 も日曜日
次の 10 回の実行
夏時間で飛ばされる時刻は切り替え直後に実行され、繰り返される時刻は 1 回だけ実行されます(時がワイルドカードの場合を除く)。
標準の crontab 構文です。Quartz と AWS EventBridge は異なるフィールド(秒、年、?、1 = 日曜日)を使います。
時刻ではなくテキストをマッチさせたいですか? 正規表現テスターを開く
cron 式を作成して、意味を確認
この cron 式ジェネレーターは、スケジュールを crontab の構文に変換し、その逆も行います。式を入力または貼り付ければわかりやすい文章として読め、コントロールでフィールドごとに組み立てることもできます。次の 10 回の実行日時は、夏時間の切り替えも考慮して任意のタイムゾーンで確認できます。あらゆる Linux サーバーの cron と同じルール(つまずきやすいルールも含めて)に従い、すべての計算はブラウザ内で行われます。
cron 式の書き方
- 平日 9:00 などのプリセットから始めるか、
*/15 9-17 * * 1-5のような式を入力します。 - 入力欄の下の文章を読み、スケジュールが意図どおりの意味になっているか確認します。
- ビルダーでフィールドを調整します。分、時、日、月、曜日のいずれかを選び、毎回、N ごと、特定の値、範囲から選びます。クリックするたびに式が更新されます。
- サーバーやスケジューラーが使うタイムゾーンを選んで次回の実行日時を確認し、式を crontab、CI のワークフロー、ジョブスケジューラーにコピーします。
cron の構文:5 つのフィールド
標準的な crontab の行は、スペースで区切られた 5 つのフィールドの後にコマンドが続きます:分 時 日 月 曜日。node-cron や Spring などの一部のスケジューラーは、先頭に秒を表す 6 つ目のフィールドを任意で受け付けます。このツールはどちらの形式も読み取れます。
- 分
- 0–59
- 時
- 0–23(24 時間表記)
- 日
- 1–31
- 月
- 1–12 または JAN–DEC
- 曜日
- 0–6 または SUN–SAT。0 が日曜日で、7 も日曜日として受け付けます
- 秒(任意)
- 0–59。分の前に置く 6 つ目のフィールド
特殊文字とショートカット
*はすべての値を意味します。* * * * *は毎分実行されます。,は値を列挙します。0 8,12,18 * * *は 08:00、12:00、18:00 に実行されます。-は範囲です。0 9 * * 1-5は月曜日から金曜日の 09:00 に実行されます。/は間隔です。*/5 * * * *は 5 分ごと、1-10/2は 1、3、5、7、9 を意味します。- ショートカット:
@hourly、@daily(または@midnight)、@weekly、@monthly、@yearly(または@annually)。@rebootは cron デーモンの起動時に 1 回だけ実行されるので、次回の実行日時はありません。
日と曜日の落とし穴
日と曜日の両方のフィールドを制限すると、cron は両方ではなくどちらか一方が一致したときにジョブを実行します。そのため 0 0 13 * 5 は 13 日の金曜日だけでなく、毎月 13 日と毎週金曜日に実行されます。どちらかのフィールドが * で始まる場合は、期待どおり AND で組み合わされます。ここでの説明と実行日時はこのルールに正確に従います。
その月に存在しない日は単に飛ばされます。0 0 31 * * は 31 日まである月にだけ、0 0 29 2 * はうるう年にだけ実行されます。標準の cron で毎月の最終日に実行するには、28 〜 31 日を指定し、コマンド内で日付を確認してください。
cron のスケジュール例
これらをジェネレーターに貼り付ければ、文章として読み直し、次にいつ実行されるかを正確に確認できます。頭の中では正しく見えるスケジュールも、本番に出す前に実際の日付で確認する価値があります。特に毎月や毎年実行されるものは、間違いが判明するまでに何週間もかかるからです。
- */10 * * * *
- 10 分ごと。毎時 0 分、10 分、20 分、30 分、40 分、50 分に実行。
- 0 */6 * * *
- 6 時間ごと。00:00、06:00、12:00、18:00 に実行。
- 30 2 * * *
- 毎晩 02:30。バックアップによく使われる時間帯です(ただし下の夏時間についての注意を参照)。
- 0 9 * * MON-FRI
- 平日の 09:00。
- 0 0 1 * *
- 毎月 1 日の 0 時。@monthly と同じです。
- 0 0 1 1,4,7,10 *
- 各四半期の初日の 0 時。
- */30 * * * * *
- 30 秒ごと。秒付きの 6 フィールド形式です。
タイムゾーンと夏時間
cron は実行されているマシンの時計を使い、ほとんどのサーバーでは UTC です。次回実行の一覧でそのタイムゾーンを選ぶと、ジョブが実際にどう動くかがわかります。夏時間の切り替え前後では、時計が進むときに飛ばされる時刻は切り替え直後に実行され(02:30 は 03:30 になります)、時計が戻るときに繰り返される時刻は 1 回だけ実行されます。時のフィールドがワイルドカードのジョブは、Vixie cron と同じく、繰り返される 1 時間の両方で実行され続けます。
他のスケジューラーは別の方言を使います。Quartz(Java)と AWS EventBridge は秒と年を含む 6 〜 7 個のフィールドを使い、2 つの日のフィールドのどちらかに ? が必要で、曜日は日曜日を 1 として数えます。GitHub Actions と Kubernetes の CronJob は、UTC で標準の 5 フィールドを使います。貼り付ける前に、プラットフォームがどの形式を求めているか確認してください。
スケジュールではなくパターンをテストしたい場合は、正規表現テスターをお試しください。
よくある質問
- cron の * * * * * はどういう意味ですか?
- 5 つのアスタリスクは、毎日、毎時、毎分を意味します。標準の cron で可能な最も頻繁なスケジュールで、それ以上の頻度には秒のフィールドを持つスケジューラーが必要です。
- cron ジョブを 5 分ごとに実行するには?
- */5 * * * * を使います。分のフィールドの */5 という間隔は、0、5、10 … 55 分にマッチします。
- cron ジョブを毎日 0 時に実行するには?
- 0 0 * * * か、ショートカットの @daily(@midnight とも書けます)を使います。0 時は cron を実行しているサーバーのタイムゾーン(多くの場合 UTC)での時刻である点に注意してください。
- cron ジョブを平日だけ実行するには?
- 曜日のフィールドに 1-5 を入れます。たとえば 0 9 * * 1-5 で月曜日から金曜日の 09:00 です。MON-FRI でも使えます。
- cron で日曜日は 0 と 7 のどちらですか?
- どちらもです。標準の cron は日曜日として 0 と 7、そして SUN 〜 SAT の名前を受け付けます。Quartz と AWS は異なり、日曜日から始めて 1 〜 7 で番号を付けます。
- cron ジョブが想定より多くの日に実行されるのはなぜですか?
- 日と曜日の両方を指定すると、cron はどちらかが一致したときに実行します。一方だけを条件にしたい場合は、もう一方のフィールドを * にしてください。
- cron はどのタイムゾーンを使いますか?
- crontab で CRON_TZ を設定するか、スケジューラーに独自の設定がない限り、マシンのシステムのタイムゾーンを使います。GitHub Actions などのクラウドのスケジューラーは UTC を使います。
- cron で秒を指定できますか?
- 標準の crontab ではできず、最小単位は分です。node-cron、Spring、Quartz などのライブラリは先頭に秒のフィールドを追加で受け付け、このツールもそれを理解します。