あまり滅多なことでは必要無いケースかもですが
linuxのcron実行を、奇数日のみ実行させたい場合、偶数日のみ実行させたい場合はどうcrontabを指定したら良いのでしょうか?
レジュメ
結論、cronで奇数日のみの実行したいcrontab日時指定方法
30 19 1-31/2 * * /root/test.sh > /root/test.log 2>&1
上記がサンプルのcrontabでの設定方法です。
ポイントは「1-31/2」の部分です。
結論、cronで偶数日のみ実行させたいcrontab日時指定方法
30 19 2-31/2 * * /root/test.sh > /root/test.log 2>&1
上記がサンプルのcrontabでの設定方法です。
ポイントは「2-31/2」の部分です。
環境・前提条件
今回確かめた環境は
- aws上のamazon linux
- kernel: Linux version 3.10.0-229.14.1.el7.x86_64
で確かめています
crontabの「*/2」って何?
以下のマニュアルコマンドで上記内容が確認出来ます。
man 5 crontab
上記赤枠の説明を読みますと、要するに「/2」の「2」はステップ値とのことです。
偶数時間指定の場合
- “0-23/2” = “0,2,4,6,8,10,12,14,16,18,20,22” = ”*/2”
と同意味になります。
上記は偶数の指定ですが、奇数時間指定の場合は
- “1-23/2”
で指定できる事がわかります。
これは、「日にち」だけでなく「時間」や「分」でも使用できる指定方法です。
ちなみにcrontabってどんな記述指定方法(フィールドの意味)だったか?
30 19 1-31/2 * * /root/test.sh > /root/test.log 2>&1
上記の意味合いは、一つ目のフェールドから順番に説明しますと
- 分: 0-59
- 時: 0-23
- 日: 1-31
- 月: 1-12 (or names, see below)
- 曜日: 0-7 (0 or 7 is Sunday, or use names)
- 最後にコマンド:
を意味しています。
なので、サンプルのcrontab指定は「奇数日の19時半に毎月どの曜日でも、test.shを実行する」という意味合いになります。