奇数日・偶数日のみにcronを実行する方法。Linux crontabの指定方法

最終更新日付: 2017年5月13日

あまり滅多なことでは必要無いケースかもですが
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」って何?

image

以下のマニュアルコマンドで上記内容が確認出来ます。

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

上記の意味合いは、一つ目のフェールドから順番に説明しますと

  1. 分: 0-59
  2. 時: 0-23
  3. 日: 1-31
  4. 月: 1-12 (or names, see below)
  5. 曜日: 0-7 (0 or 7 is Sunday, or use names)
  6. 最後にコマンド:

を意味しています。

なので、サンプルのcrontab指定は「奇数日の19時半に毎月どの曜日でも、test.shを実行する」という意味合いになります。

奇数日・偶数日のみにcronを実行する方法。Linux crontabの指定方法」への2件のフィードバック

  1. DSR_HON

    奇数日と偶数日が逆ではないでしょうか?

    奇数日が
    30 19 1-31/2 * * /root/test.sh > /root/test.log 2>&1

    偶数日が
    30 19 2-31/2 * * /root/test.sh > /root/test.log 2>&1

    だと思います。
    また偶数日が”2-31/2”となっていますが、”2-30/2″でも問題無いと思っています。

    返信
    1. putise 投稿作成者

      >DSR_HONさん

      ご指摘ありがとうございます!
      失礼しました、訂正させてもらいます。

      返信

コメントを残す

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