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-FRIやJAN,JULのようにします。
曜日は0が日曜、6が土曜です。7も日曜として受け付ける実装が多く、0と7は同じ日を指します。
日と曜日を一緒に指定すると
いちばん誤解の多いところです。3番目の欄(日)と5番目の欄(曜日)の両方に値を入れると、cronは両方を満たす日ではなく、どちらか一方でも合う日に実行します。
0 0 1 * MONは「毎月1日かつ月曜」ではなく、「毎月1日、または毎週月曜」です。ひと月に5回ほど動きます。どちらか一方だけを指定して残りをアスタリスクにしておけば、この落とし穴を避けられます。
まずタイムゾーンを確かめる
このツールが出す次回の実行時刻は、いま見ている端末のタイムゾーンに従います。サーバーのcronはサーバー側のタイムゾーンで動くので、配置する前にどの設定かを確かめてください。UTCのままのサーバーは珍しくなく、日本時間の朝9時のつもりが夕方に動くことがあります。
サマータイムのある地域では、時計をずらす日に該当時刻の処理が飛ばされたり2回動いたりします。深夜2時台に当たる処理は避けておくと安全です。
6欄のものは別の書き方
先頭に秒の欄が付いた6欄の式があります。SpringやQuartzで使う書き方で、標準のcrontabとは別物です。このツールは5欄だけを読みます。
6欄の式をそのままcrontabに入れると、欄がひとつずつずれます。秒のつもりの値が分、分が時として読まれて見当違いの時刻に動くので、どちらの文法かを先に合わせておいてください。