Cron式ジェネレーター

0-59

0-23

1-31

1-12

0-7(0,7=日)

次へ

cronの構文は簡潔ですが間違えやすく、たとえば0 */6 * * *は6時間ごとに実行されますが、*/6 0 * * *は午前0時台の最初の1時間だけ、10回実行されます。このジェネレーターでは、スケジュール(15分ごと、平日の午前9時、毎月1日など)を視覚的に選ぶだけで正確な式が得られ、その意味を平易な言葉で説明した説明文も表示されます。

cron式の作り方

  1. 1

    プリセットを選ぶか、フィールドに直接入力する

    毎分、毎時、毎日0時、毎週日曜日、毎月1日はワンクリックで選択できます。それ以外のスケジュールは、5つのフィールドに直接値を入力してください。

  2. 2

    スケジュールを絞り込む

    特定の分・時・日(日付)・月・曜日を指定できます。範囲(9-17)、リスト(1,15)、ステップ(*/6)にすべて対応しています。

  3. 3

    式を読み取る

    ジェネレーターは常に標準の5フィールドcron形式を出力し、スケジュールの内容を平易な言葉で説明します。

  4. 4

    方言を確認する

    方言によって仕様が異なります(Quartz、AWS EventBridge、Kubernetes)。お使いのスケジューラーが期待する形式と式が一致することを確認してください。

5つのフィールド

*  *  *  *  *
│  │  │  │  │
│  │  │  │  └── 曜日 (0-6、日曜日=0、または SUN-SAT)
│  │  │  └───── 月 (1-12、または JAN-DEC)
│  │  └──────── 日(日付) (1-31)
│  └─────────── 時 (0-23)
└────────────── 分 (0-59)

各フィールドには次の値を指定できます:

  • 特定の数値:5
  • リスト:1,15,30
  • 範囲:9-17
  • ステップ:*/10(10ごと)または0-30/5(0から30まで5ごと)
  • ワイルドカード:*(すべての値)

よく使う式

スケジュール cron式
毎分 * * * * *
15分ごと */15 * * * *
毎時0分 0 * * * *
6時間ごと 0 */6 * * *
毎日午前2時30分 30 2 * * *
平日の午前9時 0 9 * * 1-5
毎週月曜日の午前8時 0 8 * * 1
毎月1日の午前3時 0 3 1 * *
平日の9時から17時まで15分ごと */15 9-17 * * 1-5
毎月1日と15日の正午 0 12 1,15 * *
毎週日曜日の午前0時 0 0 * * 0

「日付」と「曜日」の落とし穴

標準のcronでは、「日付(日)」と「曜日」の両方を指定した場合(どちらも*でない場合)、いずれか一方が一致した時点でジョブが実行されます(ANDではなくOR)。0 0 1 * MONは、毎月1日および毎週月曜日に実行され、1日が月曜日のときだけ実行されるわけではありません。

Vixie CronおよびほとんどのLinuxディストリビューションはこの「OR」ルールを採用しています。Quartz(Java)や他の一部の環境では「AND」が使用されています。不確かな場合は、スケジューラーで試し実行(dry run)かテストジョブを使って式を確認してください。

方言の違い

  • 標準的なcron(Linux):5つのフィールドあり、曜日(0~6)で指定可能(日曜日は0または7)。
  • Quartz(Spring、Javaアプリ):6~7つのフィールドで構成され、第1フィールドは秒、オプションの第2フィールドは年。曜日は1~7(日曜日=1)です。
  • AWS EventBridge cron:6フィールドで年を含みます。曜日と日付は相互排他的でなければならず、いずれか一方を?にする必要があります。
  • GitHub Actions:標準の5フィールド形式で、最小間隔は5分、UTCのみ対応です。
  • Kubernetes CronJob:標準の5フィールド形式で、デフォルトはUTCです。

お使いのスケジューラーがどの方言を採用しているか必ず確認してください。

タイムゾーン

従来のcronはサーバーのローカルタイムゾーンで動作します。これは夏時間(DST)の切り替え時に大きな問題を引き起こします。たとえば午前2時30分のジョブは、切り替え日に2回実行されたり、まったく実行されなかったりすることがあります。最近のスケジューラー(systemdタイマー、Kubernetes、EventBridge)ではタイムゾーンを明示的に指定できます。特別な理由がない限りUTCを使うことをおすすめします。

よくある質問

そのフィールドで5単位ごと、0から始まることを意味します。分フィールドでは、*/5は0分、5分、10分、15分、…、55分に実行されます。0,5,10,15,20,25,30,35,40,45,50,55の短縮表記です。

cronは、60分や24時間で割り切れない任意の間隔を表現できません。90分の場合は、具体的な実行時刻を列挙します。0 0,9 * * *に追加の行を組み合わせるか、任意の間隔に対応したスケジューラー(systemdタイマー、anacron)に移行してください。

午前0時です。フィールドの順序は「分・時」なので、0 0は「0時の0分」を意味します。正午なら0 12 * * *です。

標準のcronはそのジョブをスキップします。実行漏れは再試行されません。Anacronは次回起動時に、漏れた日次・週次・月次ジョブを実行します。Kubernetes CronJobには、漏れた実行枠を明示的に扱うためのstartingDeadlineSecondsconcurrencyPolicyが用意されています。

関連ツール