SomeeLab.tools

Cron式の読み取り

cron式を5つの欄に分けて解きほぐし、次にいつ動くかを表示します。5欄の標準記法と@dailyなどの略記に対応しています。登録不要、ブラウザ上で計算します。

0
9
すべて
すべて
曜日
月-金

5つの欄の並び

左から分、時、日、月、曜日です。0 9 * * 1なら分が0、時が9、日付と月に制限はなく曜日が月曜という意味なので、毎週月曜の朝9時に動きます。

アスタリスクはその欄に制限がないという印です。前の方の欄をアスタリスクにするとその分だけ頻繁に動くので、* * * * *は1分ごとになります。分の欄をうっかりアスタリスクにすると1日に1440回動きます。

記号の読み方

  • 1-5は1から5まで続く値です。
  • 1,3,5はその3つだけです。
  • */15は0から15ずつ飛ばします。分の欄なら0、15、30、45になります。
  • 9-17/2は範囲の中だけで飛ばします。
  • 曜日と月は名前でも書けます。MON-FRIJAN,JULのようにします。

曜日は0が日曜、6が土曜です。7も日曜として受け付ける実装が多く、07は同じ日を指します。

日と曜日を一緒に指定すると

いちばん誤解の多いところです。3番目の欄(日)と5番目の欄(曜日)の両方に値を入れると、cronは両方を満たす日ではなく、どちらか一方でも合う日に実行します。

0 0 1 * MONは「毎月1日かつ月曜」ではなく、「毎月1日、または毎週月曜」です。ひと月に5回ほど動きます。どちらか一方だけを指定して残りをアスタリスクにしておけば、この落とし穴を避けられます。

まずタイムゾーンを確かめる

このツールが出す次回の実行時刻は、いま見ている端末のタイムゾーンに従います。サーバーのcronはサーバー側のタイムゾーンで動くので、配置する前にどの設定かを確かめてください。UTCのままのサーバーは珍しくなく、日本時間の朝9時のつもりが夕方に動くことがあります。

サマータイムのある地域では、時計をずらす日に該当時刻の処理が飛ばされたり2回動いたりします。深夜2時台に当たる処理は避けておくと安全です。

6欄のものは別の書き方

先頭に秒の欄が付いた6欄の式があります。SpringやQuartzで使う書き方で、標準のcrontabとは別物です。このツールは5欄だけを読みます。

6欄の式をそのままcrontabに入れると、欄がひとつずつずれます。秒のつもりの値が分、分が時として読まれて見当違いの時刻に動くので、どちらの文法かを先に合わせておいてください。