
Параметры 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"