условия OR

условия OR

Параметры Crontable, похоже, работают как условия 'and'. Так что пример

0 9-5 * * 1-5

Запускается при выполнении условий «минута равна нулю, И час находится между 9 и 5, И день находится между понедельником и пятницей».

Мне нужна функция 'or', чтобы я мог сказать "запустить с понедельника по пятницу ИЛИ 8-й день месяца". Существует ли такая функция?

Я понимаю, что можно добавить две записи, но при большом количестве записей появляется что-то, что можно забыть.

решение1

Я собирался сказать: используйте ,(запятую). От man 5 crontab:

Lists are allowed.
A list is a set of numbers  (or  ranges)  separated  by  commas.
Examples:  "1,2,5,9","0-4,8-12".

Но ваш случай немного сложнее, и вы можете воспользоваться этой функцией:

Note: The day of  a command's execution can be specified by two fields day
of month, and day of week. If both fields are restricted (i.e., aren't *),
the command will be run when either  field matches the current time.
For example, "30  4  1,15  *  5" would cause a command to be run at 4:30 am
on the 1st and 15th of each month, plus every Friday.

Так что в вашем случае вы можете написать 0 9-5 8 * 1-5. Это будет запускать вашу команду каждое 8-е число месяца и каждый день с понедельника по пятницу.

Другое решение — использовать test( man bash, раздел УСЛОВНЫЕ ВЫРАЖЕНИЯ, и man date):

# Run on every second Saturday of the month:
   0 4 8-14 * *    test $(date +%u) -eq 6 && echo "2nd Saturday"

Связанный контент