例えば、
第二週火曜日のみOS再起動したい
といった要望があるかと思います。この場合のcrontabの日時指定方法はあるのでしょうか?
レジュメ
結論、残念ながら第○週○曜日crontabのフィールドでは指定できなかった。
残念ながらcrontabの日時指定では実現出来ませんでした。
そのため、crontabのコマンド内(シェルスクリプト内)で第何週か見極める作りにしました。
自分が確かめて失敗した方法を紹介します。
環境・前提条件
今回自分が確かめた環境を紹介します
- AWS上のAmazon Linux
- kernel: Linux version 3.10.0-229.14.1.el7.x86_64
失敗、日付と曜日を且つで指定出来ないものか?
日付と曜日を且つで指定出来ないものかと思い確かめました。
例えば、第二火曜日を以下のようにcrontabでしてしてみました。
0 * 8-14 * 2 /root/test.sh >> /root/test.log 2>&1
意味合いは、「毎時0分に8~14日の毎月火曜日に実行」という意味合い成って欲しいと思いcrontabの日時を指定しています。
結果、NGでした。「日付指定(8-14)」と「曜日指定(2=火曜日)」は「かつ」ではなく「または」でした。
crontabのマニュアルに「日付」と「曜日」の同時指定について書かれていました
上記は
man 5 crontab
コマンドで確認できます。
赤枠の部分を約しますと、ざっくり
日付指定と曜日指定をすると(例えば、”30 4 1,15 * 5”)、日付指定と曜日指定の両方で実行されます(例えばの場合、”1日と15日と毎週金曜日の4時半に実行”という意味合い)
なるほど、、、
失敗、crontabのコマンド内で「$」とか「&」とかは使用できない
以下のような指定を試みてみました。
第2火曜日の4:30にスクリプト実施のつもりで
30 4 8-14 * * test $( date +%w ) -eq 2 && /root/test.sh
こちらも、結果はNG。crontabのコマンドフィールドに「$」や「&」を使用できませんでした。
ということで、
結果crontabのコマンドフィードスクリプト内で第何週を判断するようにしました。
@reboot OS再起動後にcron実行。
参考までに情報なのですが
crontabの面白い指定方法があることを知りました
@reboot /root/test.sh > /root/test.log 2>&1
と言ったcrontab指定方法で、OS起動後にcronを実行させることが出来るんですね。
知りませんでした。
以上、参考情報でした。