crontabを隔週や第一月曜日などのタームで実行する為に

これまで奇跡的にもこのタームでなにかを実行することがありませんでした。

全然知らなかったのですが、普通に指定って出来ないんですね(笑)
てっきり第一月曜日の17:00に実行であれば、こんな感じで簡単に出来ると思っていたのですが、

0	17	1-7	*	mon		echo "hogehoge" > fugafuga.txt

駄目みたい……

どうも日付と曜日って [ and ] じゃなくて [ or ] みたいです。罠ですね(笑)

みなさん、testコマンドを使って、コマンド側で振り分けているみたいなので、メモ代わりにまとめておきます。

隔週月曜日の例

0	17	*	*	mon		test $(expr $(date '+\%W') \% 2 ) -eq 0 && echo "hogehoge" > fugafuga.txt

週番号を取得して2で割って余りがない場合に実行する感じですね。
3週毎、4週毎であれば、割る数を変更してあげるだけ。

crontabでは、%をエスケープする必要があるので注意。

第一月曜日の例

0	17	1-7	*	*		test $( date '+\%w' ) -eq 1 && echo "hogehoge" > fugafuga.txt

毎月1日〜7日の間だけ、曜日番号を取得し月曜日(1)だったら実行します。

隔週で利用した週番号を取得する%Wと違って曜日は小文字の%wなので注意です。