crontab jour de la semaine vs jour du mois?


14

J'ai ajouté ceci à / etc / crontab sur quelques systèmes Linux et FreeBSD différents:

# monthly reboot: 3rd Tuesday of every month
56 07 15-21 * 2 root /sbin/shutdown -r now

Je veux un redémarrage le 3ème MARDI de chaque mois. Cependant, tous les systèmes ont redémarré le 3ème mercredi de ce mois (le 19).

Qu'est-ce que je fais mal?

Mise à jour : Grâce à la réponse de Ranon ci-dessous, il semble que la révision ci-dessous fonctionnera, quelqu'un peut-il confirmer ou existe-t-il une meilleure façon de le faire?

# monthly reboot: 3rd Tuesday of every month
56 07 15-21 * * root test $(date +\%u) -eq 2 && /sbin/shutdown -r now

Réponses:


16

Jetez un oeil à man 5 crontab.

Remarque: Le jour de l'exécution d'une commande peut être spécifié par deux champs - jour du mois et jour de la semaine. Si les deux champs sont restreints (c'est-à-dire ne sont pas *), la commande sera exécutée lorsque l'un des champs correspond à l'heure actuelle. Par exemple, `` 30 4 1,15 * 5 '' entraînerait l'exécution d'une commande à 4h30 le 1er et le 15 de chaque mois, plus chaque vendredi. On peut cependant obtenir le résultat souhaité en ajoutant un test à la commande (voir le dernier exemple dans l'EXEMPLE CRON FILE ci-dessous).

Vos serveurs devraient donc redémarrer tous les jours du 15 au 21 ET chaque mardi.

Jetez un œil à l'exemple des pages de manuel:

# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +%u) -eq 6 && echo "2nd Saturday"

6
Cela ressemble sérieusement à un bug de conception. Si je voulais tous les jours du 15 au 21 ET chaque mardi, je ferais deux entrées crontab distinctes. Devoir recourir à un test séparé est un vilain hack. Cela dit, merci d'avoir fourni une solution de contournement!
Laurence Gonsalves
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.