
Os parâmetros crontáveis parecem funcionar como condições 'ands'. Então o exemplo
0 9-5 * * 1-5
É executado quando as condições são atendidas "o minuto é zero E a hora está entre 9 e 5 E o dia está entre segunda e sexta-feira".
O que eu gostaria é de uma função 'ou', para poder dizer "executar de segunda a sexta OU no 8º dia do mês". Será que tal coisa existe?
Sei que você poderia adicionar duas entradas, mas com muitas entradas acrescenta algo para esquecer.
Responder1
Eu ia dizer: use ,
(vírgula). De 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".
Mas o seu caso é um pouco mais complicado e você pode aproveitar este recurso:
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.
Então, no seu caso, você pode escrever 0 9-5 8 * 1-5
. Isso executaria seu comando todo dia 8 de cada mês e todos os dias de segunda a sexta.
Outra solução é usar um test
( man bash
, seção EXPRESSÕES CONDICIONAIS e man date
):
# Run on every second Saturday of the month:
0 4 8-14 * * test $(date +%u) -eq 6 && echo "2nd Saturday"