crontab の日付指定、あなたの理解は間違っている

ご存じの方には濡れ衣ですごめんなさい。

これ間違って理解してました。
真実を知って衝撃を受けました。
周りに聞いてみたら多くの人が同じく誤解してました。

問題

crontab でこういうスケジュールを設定したら
コマンド hoge はどのようなタイミングで実行されるでしょう。

0 0 13 * 5 hoge

こたえ

毎月13日の金曜日の0時0分

だと思ってたんだけど、これ間違いでした。

正しくは、

毎月13日または金曜日の0時0分

だった。はい「知ってたよ」っていう人はごめんなさいよ。

日と曜日だけ or になる

crontab の書式は、基本的に and なんですよね。
0 9 1 10 * だと、
10月 かつ 1日 かつ 9時 かつ 0分 のタイミングで実行。

ところが、日と曜日だけは「または」になります。
さっき実験してみたけど実際にそうなった。

crontab – Wikipedia

直感にあわないものの、「日」(第3フィールド)および「曜日」(第5フィールド)が同時に指定された場合、どちらかが満たされた場合両方でコマンドが実行される。

英語あたりだとどっちも day だし、
日と曜日の区別があまり強くないことも関係してるのかな。
ともかく直感にあわないけどそうなってます。

crontab だけで13日の金曜日を指定することはできないんですね。
13日に発動させて、あとはアプリケーション側で金曜日じゃなかったら無視、ぐらいか。

だからご存じだったらごめんなさいて。

  • このエントリーをはてなブックマークに追加