66312
毎月１日２時５分に特別な処理を行い、  
１日を除く毎週月曜日1時5分に定期的な処理をするスクリプトを実行させたい思い、  
crontabに下記のように書いてcronを実行しました。

```

    5 1 2-31 * mon root sh /hoge/hoge/hoge.sh
    5 2 1 * * root sh /hoge/hoge/hoge.sh
    
```

1日を除く月曜日の時は、上の行のみが実行されて、  
1日の時は、下の行のみが実行されると思います。  
1日で月曜日の時も下の行のみが実行されると思います。  
crontabは、上記のような書き方であっていますでしょうか。  
また、crontabで複数条件が評価される場合は、どのような順番で評価されるのでしょうか。

自作したスクリプトは、

```

    if [ 実行時の日付が1日であるか ]
       特別な処理
    else
       定期的な処理
    fi
    
```

として、スクリプト内のif文で処理を振り分けています。  
使用しているOSはCentOS7です。
CC BY-SA 4.0
2020-05-05T00:18:18.363
66297
2020-05-05T07:07:29.217
21189
question
centos bash sh cron
複数条件でのcrontabの書き方
```

    5 1 2-31 * mon root sh /hoge/hoge/hoge.sh
    
```

こちらの条件は「１日以外の全ての月曜日」という条件ではなく、「１日以外もしくは、月曜日」という条件であると解釈されます。

ですので、個人的には、以下のように記述するのが良いのではないかと思います。

```

    5 2 1 * *   root sh /hoge/hoge/special.sh
    # crontab のコマンド部分において、 % だけは特殊処理されてしまうので、\ でエスケープ。
    # 詳細は man 5 crontab を参照。
    5 1 * * mon root [ $(date +\%d) -ne 1 ] && sh /hoge/hoge/normal.sh
    
```

これにより、日付ごとの振り分け処理が crontab のみを確認すれば良くなります。

参考: <https://superuser.com/q/348348/485243>
CC BY-SA 4.0
2020-05-05T06:57:36.493
66312
2020-05-05T07:07:29.217
2020-05-05T07:07:29.217
754
754
66297
answer