Cronjob s'exécute avant l'heure prévue, qu'est-ce qui pourrait ne pas arriver?

10

J'ai ci-dessous crontab prévu pour samedi qui tombe entre les jours 19-23, je ne sais pas pourquoi il s'est déroulé le 20 (vendredi). Des suppositions?

00 21 19-23 * 6 <command>
simer
la source
1
Vous pourriez trouver de l'inspiration dans /etc/cron.d/mdadmUbuntu et Debian. Voici comment cela fonctionne le premier dimanche de chaque mois: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
merci kasperd, 0 18 * * 6 [date +\%d -le 07] && <task> fonctionne bien pour moi, où il doit être exécuté le premier samedi de chaque mois.
simer

Réponses:

16

Cette expression Cron se traduit par:

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

Donc, il a explicitement dit à cron de se présenter le vendredi 20. Cela est dû à:

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).

Ces informations proviennent de cet outil Cron pratique: http://crontab.guru/

Pour que votre travail s'exécute des jours donnés quand c'est samedi, vous pouvez utiliser:

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

Cette solution est de crontab jour de la semaine vs jour du mois?

Madoc Comadrin
la source
6
Attention, cela %a une signification particulière dans les cronjobs - il sépare le stdin de la commande.
user1686