cron式チェッカー(読み解き・次回実行時刻)
どんなcron式もわかりやすい言葉で1フィールドずつ読み解き、次にいつ実行されるかを正確に確認できます。
cron式チェッカー — crontabの1行が本当に意味すること
cron式を貼り付けると、わかりやすい文として読めるうえ、5つのフィールドを1つずつ確認でき、次回の実行時刻を自分のタイムゾーンかUTCで確かめられます。範囲外の値、Quartzからコピーした6フィールドの式、2月31日のように決して訪れないスケジュールなど、ジョブが違う時刻に実行される原因になる誤りを見つけます。
cronはLinuxやmacOSのcrontabを動かすスケジューラーで、その構文はKubernetesのCronJob、GitHub Actions、GitLab CI、多くのクラウドのスケジューラーでも使われています。構文は簡潔なぶん読み違えやすく、ここで確認しておけば、1日1回のはずのジョブが毎分実行される事態を防げます。
使い方
- cron式を入力するか貼り付けます。よく使うスケジュールから選ぶこともできます。
- 説明と、その下の5つのフィールドを読みます。
- 次回の実行の一覧を確認します。タイムゾーンはこの端末とUTCで切り替えられます。
- フィールドが赤枠で示されたら、その上のメッセージに問題点が表示されます。
5つのフィールド
| フィールド | 使える値 | 例 | 意味 |
|---|---|---|---|
| 分 | 0–59 | 30 | 30分に |
| 時 | 0–23 | 9-17 | 09:00から17:59まで |
| 日 | 1–31 | 1,15 | 1日と15日に |
| 月 | 1–12またはJAN–DEC | */3 | 1月、4月、7月、10月 |
| 曜日 | 0–6またはSUN–SAT(7も日曜日) | 1-5 | 月曜日から金曜日 |
特殊文字
*はそのフィールドのすべての値を表します。,はリストを区切ります:1,15,30。-は範囲を表します:9-17。/はステップを表します:*/15は最小値から15ごと、5/15は5から15ごとです。- マクロは1行全体の代わりになります:
@hourly、@daily、@weekly、@monthly、@yearly。
日と曜日の落とし穴
日と曜日の両方のフィールドを絞り込むと、標準のcronは両方ではなく、どちらか一方に一致する日にジョブを実行します。0 0 1 * 1は、毎月1日の0時に加えて、毎週月曜日にも実行されます。多くの人は「1日が月曜日にあたる日」を期待しますが、素のcronではそれを表現できません。このツールは両方のフィールドが指定されていると注意を表示し、次回の実行の一覧を見れば実際の動作が一目でわかります。
タイムゾーン
cronは、それを実行するマシンやサービスのタイムゾーンを使います。サーバーやGitHub ActionsのようなクラウドのスケジューラーはたいていUTCで動くため、09:00のつもりで書いたジョブが09:00 UTCに実行されることがあります。これはほとんどの地域で別の時刻です。さらに、住んでいる地域で夏時間が始まったり終わったりすると、1時間ずれます。デプロイする前に、この端末とUTCで次回の実行を比べて、違いを確かめてください。
このツールが対応していないもの
- 秒:QuartzやSpringの6~7フィールドの式は、誤って解釈せずにその旨を表示します。
- 一部のスケジューラーが追加している
L、W、#のような非標準の拡張。 - 起動時に1回だけ実行され、次回の時刻を持たない
@reboot。
関連ツール
実行時刻をUnixタイムスタンプに、またはその逆に変換するには、タイムスタンプ変換ツールを使ってください。タスクページでは、このツールをよく使うスケジュールで開けます:5分ごと、1時間ごと、毎日0時。