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>

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?


6
Attention, cela %a une signification particulière dans les cronjobs - il sépare le stdin de la commande.
user1686
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.