3

Crontable параметры, кажется, функционируют как 'ands' условия. Итак, пример

0 9-5 * * 1-5

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

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

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

1 ответ1

3

Я собирался сказать: использовать , (запятая). От 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 . Это будет запускать вашу команду каждый восьмой день месяца и каждый день с понедельника по пятницу.

Другое решение состоит в том, чтобы использовать 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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .