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
ane
la source

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"
Jens Erat
la source
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