cronでは「毎月第1月曜日に実行」ができない

社内の技術メモに「cronでは第1月曜日に実行などはできないので、実行されるスクリプト側で条件判定しないとダメ」というような記述がありました。一体どういうことでしょうか。

crontabの書式は「分 時 日 月 曜日 コマンド」です。また、数字はハイフンで範囲指定ができます。下記のように指定すれば毎月第1月曜日の午前3時にコマンドを実行できそうな気がします。

0 3 1-7 * 1 /path/to/command/execute-only-1st-monday

しかし、これは期待通りには動きません。「1日から7日までの期間の唯一の月曜日」を指定したつもりが、実際には「1日から7日のすべて、または日付に関係なく月曜日」と解釈されます。マニュアルにも書いてあるのですが、「日」と「曜日」が両方指定された場合、OR条件になるのです。

ネット上を探すと、これでハマって試行錯誤した人が複数いるようです。testコマンドとdateコマンドを使ってcrontabのコマンド指定部分で条件判定している人を見つけましたが、それは頑張り過ぎな気がします。趣味の問題ですけど、crontabはシンプルに保って呼び出される側で条件判定した方がいいんじゃないでしょうか。

コメント / トラックバックはありません

コメントする