ご存じの方には濡れ衣ですごめんなさい。
これ間違って理解してました。
真実を知って衝撃を受けました。
周りに聞いてみたら多くの人が同じく誤解してました。
問題
crontab
でこういうスケジュールを設定したら
コマンド hoge はどのようなタイミングで実行されるでしょう。
0 0 13 * 5 hoge
こたえ
毎月13日の金曜日の0時0分
だと思ってたんだけど、これ間違いでした。
正しくは、
毎月13日または金曜日の0時0分
だった。はい「知ってたよ」っていう人はごめんなさいよ。
日と曜日だけ or
になる
crontab の書式は、基本的に and なんですよね。0 9 1 10 *
だと、
10月 かつ 1日 かつ 9時 かつ 0分 のタイミングで実行。
ところが、日と曜日だけは「または」になります。
さっき実験してみたけど実際にそうなった。
直感にあわないものの、「日」(第3フィールド)および「曜日」(第5フィールド)が同時に指定された場合、どちらかが満たされた場合両方でコマンドが実行される。
英語あたりだとどっちも day だし、
日と曜日の区別があまり強くないことも関係してるのかな。
ともかく直感にあわないけどそうなってます。
crontab だけで13日の金曜日を指定することはできないんですね。
13日に発動させて、あとはアプリケーション側で金曜日じゃなかったら無視、ぐらいか。
だからご存じだったらごめんなさいて。