Cronjob é executado antes da hora programada, o que poderia estar errado?

10

Tenho abaixo do crontab programado para sábado, que cai entre os dias 19 e 23, não sei por que ele foi executado no dia 20 (sexta-feira). Qualquer suposição?

00 21 19-23 * 6 <command>
simer
fonte
1
Você pode encontrar alguma inspiração /etc/cron.d/mdadmusada no Ubuntu e Debian. É assim que ocorre o primeiro domingo de cada mês:57 0 * * 0 root if [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ]; then /usr/share/mdadm/checkarray --cron --all --idle --quiet; fi
kasperd 23/11
obrigado kasperd, 0 18 * * 6 [date +\%d -le 07] && <task> está funcionando bem para mim, onde é necessário executar no primeiro sábado de cada mês.
Simer

Respostas:

16

Essa expressão Cron se traduz em:

At 21:00 on the 19, 20, 21, 22 and 23rd of every month and every Saturday.

Por isso, disse explicitamente ao cron para ser executado na sexta-feira 20. Isto é devido a:

When the schedule specifies both date and weekday, they're combined with a logical OR,
i.e. the job will run if current_minute == scheduled_minute 
&& current_hour == scheduled_hour && current_month == scheduled_month && 
(current_day == scheduled_date OR current_weekday == scheduled_weekday).

Esta informação é desta útil ferramenta Cron: http://crontab.guru/

Para que seu trabalho seja executado em determinados dias, quando é sábado, você pode usar:

00 21 19-23 * * test $(date +%u) -eq 6 && command

Esta solução é do dia da semana crontab vs. dia do mês?

Madoc Comadrin
fonte
6
Cuidado %com um significado especial nos cronjobs - ele separa o stdin do comando.
user1686