crontabで平日に実行させる方法

こんにちは。hacknoteのr.katoです。

今回はcrontabに条件式を書き込むことで平日(月~金)のみプログラムが実行されるように設定する方法を紹介していきます。
祝日は考慮していません。

結論から述べると次のようにすれば良いです。

0 9 1 * * [ $(date "+\%w") -ge 1 -a $(date "+\%w") -le 5 ] && コマンド
0 9 2-3 * * [ $(date "+\%w") -eq 1 ] && コマンド

今回は毎月最初の平日9時に実行するようにしてあります。
date +"%w" でその日の曜日番号を得ることができます。(月曜日は1)
1行目で月曜日が平日であれば、コマンドを実行するようになっています。
2行目で2,3日が月曜日であれば、コマンドを実行するようになっています。

というのも次の表のようになっているからです。
赤文字になっている日に実行されます。

金 
01020304
30010203
29300102
28293001

ちなみに、本来dateコマンドを使って曜日番号を得るには、 date "+%w" ですが、crontab内では%が改行扱いになってしまうので\を入れています。