本文へスキップ
LeedyBox
支援する

Cron 式の解析 & ビルダー

Unix、Spring、Quartz、AWS の cron 式を読み解き、任意のタイムゾーンで次回の実行日時を確認したり、フィールドごとに式を組み立てたりできます。

プリセット:

スケジュール

フィールドごとの内訳

フィールド式値

次回の実行日時

    ビジュアルビルダー

    各フィールドの繰り返し方を選びます。「特定の値」には 1,15 や MON,WED のようなリスト、「範囲」には 9-17 のような開始-終了、「N ごと」には間隔を入力します。

    生成された式
    特殊文字
    *フィールドのすべての値。
    ,値のリスト。例: 1,15,30
    -範囲。例: 9-17、MON-FRI
    /間隔。例: */15 = 15ごと、5/15 = 5から15ごと(Unix cron では非対応)
    ?指定なし。Quartz と AWS では日または曜日のどちらかに必須です。
    L最後: 日フィールドの L = 末日、L-3 = 末日の3日前、曜日フィールドの 5L = 最終木曜日(Quartz の番号)。
    W最も近い平日: 15W = 15日に最も近い平日、LW = その月の最後の平日。
    #月の第N曜日: Quartz/AWS では 6#3 = 第3金曜日(1 = 日曜日)、Spring では 5#3(0 = 日曜日)。
    @daily …マクロ: @yearly、@monthly、@weekly、@daily、@hourly。@reboot は起動時に1回実行されます。

    使用する前に結果を確認してください。 このツールは現状のまま無保証で提供されており、結果が不完全または誤っている場合があります。 利用規約

    cron の実装によって、フィールドの順序、曜日の番号、特殊文字が異なります。次回の実行日時は選択したタイムゾーンでブラウザが計算したものなので、実際に実行するシステムでスケジュールを確認してください。

    使い方

    1. 「Cron 式」にスケジュールを入力または貼り付けるか、プリセットのいずれかをクリックします。プリセットをクリックすると、「形式」も「自動判定」に設定されます。概要と実行日時は入力に合わせて更新されます。
    2. 「形式」は「自動判定」のままにするか、式を使うシステムを選びます。自動判定では、5 フィールドの式を Unix、7 フィールドの式を Quartz として読みます。6 フィールドの場合は、"?" の位置から AWS か Quartz かを判断し、最後のフィールドに 1970〜2199 の年が含まれていれば AWS とし、それ以外は Spring とみなします。@weekly などのマクロは Unix として読みます。式が有効な場合は、使われた形式が状態の行に表示されます。
    3. 「スケジュール」と「フィールドごとの内訳」で各フィールドが何に一致するかを確認し、「次回の実行日時」で日時を確認します。「タイムゾーン」は最初はブラウザのタイムゾーンになっています。必要に応じて別のタイムゾーンを選び、「表示する実行回数」で 5、10、20 のいずれかを選びます。UTC 以外のタイムゾーンでは、各実行日時に UTC の時刻も表示されます。
    4. 式を組み立てる場合は「ビジュアルビルダー」を開いて形式を選び、各フィールドの繰り返し方を選んで、値が必要なフィールドには値を入力します。「この式を使う」を押すと、「生成された式」が「Cron 式」にコピーされ、「形式」がビルダーの形式に設定されて解析されるので、実行日時を確認できます。

    よくある質問

    入力した式はどこかに送信されますか?

    いいえ。式の解析と実行日時の計算はブラウザ内の JavaScript で行われ、式は LeedyBox にアップロードされません。

    0 0 13 * 5 が、13 日の金曜日だけでなく毎週金曜日に実行されるのはなぜですか?

    Unix cron では、日と曜日の両方が制限されている(どちらも * で始まらない)場合、どちらか一方のフィールドが一致すればその日が該当するため、この式は毎月 13 日と毎週金曜日に実行されます。このツールは Unix の式にこの規則を適用し、「スケジュール」には「どちらか一方で実行」と表示されます。Spring の式については両方のフィールドが一致することを条件とし、Quartz と AWS では 2 つのフィールドのどちらかに "?" を必須とすることでこの問題を避けています。Unix cron でよく使われる回避策は、毎週金曜日に実行するように設定し、ジョブの中で日付を確認する方法です。

    日曜日は 0、1、7 のどれですか?

    形式によって異なります。Unix と Spring の式では 0 と 7 のどちらも日曜日で、1 は月曜日です。Quartz と AWS では 1 が日曜日、7 が土曜日なので、1-5 は日曜日から木曜日を意味します。Spring、Quartz、AWS では、MON-FRI のような曜日名を使うとこの違いを避けられます。

    crontab の行や AWS の cron( ) 式がエラーになるのはなぜですか?

    スケジュールのフィールドだけを入力してください。crontab の行末にあるコマンドや、/etc/crontab のユーザー名は余分なフィールドとして数えられるため、無効なフィールドやフィールド数の誤りとして表示されます。AWS の場合は、cron( ) の囲みを外し、中にある 6 つのフィールドだけを貼り付けてください。

    Unix の式を Spring、Quartz、AWS 用に書き換えるにはどうすればよいですか?

    Spring では先頭に秒のフィールドが加わるため、0 9 * * 1-5 は 0 0 9 * * 1-5 になります。Quartz ではさらに日または曜日のフィールドのどちらかに "?" が必要で、日曜日を 1 と数えるため、同じスケジュールは 0 0 9 ? * MON-FRI になります。AWS には秒のフィールドがなく、Quartz と同じく日または曜日のフィールドのどちらかに "?" が必要で、末尾に年が加わるため 0 9 ? * MON-FRI * になります。Unix の式で日と曜日の両方を制限している場合は、前述の「どちらか一方」の規則を前提にしていますが、これらの形式ではこの規則を使わないため、通常は 2 つのスケジュールが必要です。変換先の形式を選んだ状態で結果を確認し、次回の実行日時を比べてください。

    実行日時が見つからないと表示されるのはなぜですか?

    式は有効ですが、ツールが検索する約 8 年先までの範囲で一致する日時が見つかりませんでした。よくある原因は、0 0 30 2 *(2 月 30 日)のような存在しない日付や、30 日までしかない月だけと組み合わせた 31 日、過去の年を指定した年のフィールドです。8 年より先の年を指定した場合も同じメッセージが表示されますが、そのスケジュールはその年になれば実行される可能性があります。従来の Unix cron を含む一部のスケジューラーは、存在しない日付を警告なしで受け付け、ジョブは実行されません。

    どのタイムゾーンが使われますか?夏時間はどう扱われますか?

    実行日時は「タイムゾーン」で選んだタイムゾーンで計算されます。スケジューラーが使うタイムゾーンを選んでください。crontab は通常サーバーのタイムゾーンに従い、AWS EventBridge のスケジュールされたルールは UTC を使い、EventBridge Scheduler ではタイムゾーンを設定できます。メニューには、ブラウザのタイムゾーン、UTC、よく使われるいくつかのタイムゾーンがあります。スケジューラーのタイムゾーンが見つからない場合は、UTC からのオフセットと夏時間の切り替え日が同じタイムゾーンを選んでください。時計が進められるときに飛ばされる時刻の実行は一覧から除かれ、時計が戻されるときに 2 回現れる時刻は 1 回だけ表示されます。これらの時間帯の扱いは cron デーモンによって異なり、たとえば cronie は、飛ばされた時間帯のジョブを切り替え直後に実行することがあります。お使いのスケジューラーの動作を確認するか、夏時間のない UTC を使ってください。