第2週火曜日にcronを実行したい場合のLinux crontab日時指定方法。

例えば、
第二週火曜日のみ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のマニュアルに「日付」と「曜日」の同時指定について書かれていました

image

上記は

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の面白い指定方法があることを知りました

image

@reboot /root/test.sh > /root/test.log 2>&1

と言ったcrontab指定方法で、OS起動後にcronを実行させることが出来るんですね。
知りませんでした。

以上、参考情報でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です