隔週で金曜日の正午にバッチ処理を実行させる方法は?
Cronでバッチ処理のスケジュール登録を行おうとしたのですが、
隔週で金曜日の正午に処理を実行させるという設定がかなり面倒でした。
そこで、代替策として、
隔週ではなく毎月第一・第三金曜日の正午にバッチ処理を実行するように設定することに。
Cronへは以下のように記述します。
=======================
# 第一金曜日の正午
0 12 1-7 * 5 root sample.sh
# 第三金曜日の正午
0 12 15-21 * 5 root sample.sh
=======================
簡単に設定を説明すると、先頭から順に「分 時 日 月 曜日 実行コマンド」を表しています。
「*」は~毎という意味です。
また、曜日は
1:月曜日
2:火曜日
3:水曜日
4:木曜日
5:金曜日
6:土曜日
7または0:日曜日なので、
となります。
例えば、
「0 12 1-7 * 5 root sample.sh」
という設定であれば、
「0」は0分、
「12」は12時、
「1-7」は1~7日、
「*」は毎月、
「5」は金曜日
を表しており、毎月1~7日の中で金曜日に該当する日付けの正午(12時0分)にバッチを実行しろということになるようです。
で、
該当の日にのみ実行されるかを検証してみることに。
あれ!?
今日第4金曜なのにバッチ処理が動いてる!?
原因を調査してみると、不覚にも参考にしたサイトの内容が間違っていたようです。
「0 12 1-7 * 5 root sample.sh」
だと1~7日まで毎日動いてしまうようです。
あと、毎週金曜日にもやはり実行されてしまうようです。
いろいろ調べた結果、そもそもCronで上記のような指定は出来ないようで、
結局、
シェルの中で第何金曜日かを判定してやるしかないみたいですね!!
いい勉強になりました。
この機会にCronについてもっと勉強してみます。
Cronの設定方法は、
http://kazmax.zpp.jp/linux/lin_cron.html
で詳しく解説してくれているので、そちらを参考にしてみてください。
因みに、Cronで「隔週で金曜日の正午に処理を実行」を実現できる書き方をご存知の方は、教えて頂けると助かります!