Cron式は短い分、パッと見ただけでは読み解きにくいものです。*/15 9-17 * * 1-5 が正確にいつ実行されるのかをドキュメントで調べる代わりに、ここに貼り付ければ文章での説明と実際の次の実行時刻がわかります。
フィールドの文法
標準のcronは左から分・時・日・月・曜日の順で5フィールドです。このツールは先頭に秒フィールドを追加した6フィールド形式(秒・分・時・日・月・曜日)も認識します。
- 分: 0〜59
- 時: 0〜23
- 日: 1〜31
- 月: 1〜12 または JAN〜DEC
- 曜日: 0〜7(0と7はどちらも日曜日)または SUN〜SAT
- 秒(6フィールドのときのみ): 0〜59
各フィールドでは次の記法が使えます。
*— すべての値(「毎分」「毎時」)5— 特定の値そのもの1-5— 範囲(月曜日から金曜日)*/15— 間隔(0から15ずつ: 0, 15, 30, 45)1,15,30— カンマ区切りのリスト
よく使うマクロにも対応しています: @yearly(0 0 1 1 *)、@monthly(0 0 1 * *)、@weekly(0 0 * * 0)、@daily(0 0 * * *)、@hourly(0 * * * *)。@rebootは決まった時刻がないため対応していません。
Unix cron・Quartz・クラウドスケジューラの方言の違い
「cron式」と呼ばれていても、システムによって文法は少しずつ異なります。
- Unix cron(crontab): 標準の5フィールド。曜日は0〜7(0と7はどちらも日曜日)で、各フィールドは値・範囲・リスト・間隔(
*/n)のみに対応します。 - Quartz(Javaのスケジューラ): 6〜7フィールドで、先頭に秒、末尾に年(任意)が付きます。曜日の値がUnix cronと異なり1〜7(1=日曜日)で、
L(その月・週の最終日)、W(最も近い平日)、#(例:6#3は第3金曜日)、?(day-of-monthかday-of-weekのどちらかを未指定にする)といったUnix cronにない記号を使います。また、day-of-monthとday-of-weekの両方に*を同時に使うことはできません。 - クラウドスケジューラ(AWS EventBridge、Google Cloud Schedulerなど): おおむねUnix cronに近いものの、細かいルールが異なることがあります。例えばAWS EventBridgeはQuartzのような6フィールド(秒なしで分から始まり、末尾に年)を使い、day-of-monthとday-of-weekのどちらかに必ず
?を入れる必要があります。
このツールが検証・説明するのは標準の5・6フィールド(先頭が秒)構文のみです。Quartzや特定のクラウドサービス専用の記号(L・W・#・?、年フィールドなど)には対応していないため、実際にそのサービスへ登録する前に該当サービスのドキュメントで再確認してください。
サマータイム(DST)で気をつけたいこと
タイムゾーンを指定して次の実行時刻を計算するとき、サマータイムのある地域では次の2点を知っておくと役立ちます。
- 切り替え開始日に存在しない時刻: サマータイムが始まる日は時計が1時間進むため、特定の時刻(多くは午前2時台)がそもそも存在しません。このツールが計算に使う日付ライブラリは、そうした時刻を切り替え前のオフセットで解釈して表示します。
- 終了日に2回訪れる時刻: サマータイムが終わる日は時計を1時間戻すため、同じ時刻が2回訪れます。このツールはその時刻を1回だけ表示します。
深夜1時〜3時台に実行されるよう予定しているジョブがあれば、サマータイムの切り替え日前後の実行時刻をこのツールで一度確認しておくことをおすすめします。