Cronjob se ejecuta antes de la hora programada, ¿qué podría estar mal?

10

Tengo debajo de crontab programado para el sábado que cae entre los días 19-23, no estoy seguro de por qué salió el 20 (viernes). ¿Alguna suposición?

00 21 19-23 * 6 <command>
simer
fuente
1
Puede encontrar inspiración en /etc/cron.d/mdadmUbuntu y Debian. Así es como funciona el primer domingo de cada mes: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 el
gracias kasperd, 0 18 * * 6 [date +\%d -le 07] && <task> está funcionando bien para mí, donde se requiere correr el primer sábado de cada mes
Simer

Respuestas:

16

Esa expresión de Cron se traduce en:

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

Entonces explícitamente le dijo a cron que se ejecute el viernes 20. Esto se debe 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 información proviene de esta práctica herramienta de Cron: http://crontab.guru/

Para que su trabajo se ejecute en determinados días, cuando es sábado, puede usar:

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

¿Esta solución es de crontab día de la semana frente a día del mes?

Madoc Comadrin
fuente
66
Tenga en %cuenta que tiene un significado especial en cronjobs: separa el stdin del comando.
user1686