6 votes

Exécuter la crontab dans un jour spécifique mais seulement si c'est dans un jour de semaine spécifique

Je veux lancer une commande avec crontab dans un jour spécifique, mais seulement si ce jour n'est pas un dimanche. J'ai essayé avec ceci

1 0 27 12 1-6 command.sh

mais la commande est aussi exécutée le mercredi 26 décembre. Comment puis-je dire à la crontab d'exécuter la commande uniquement le 27 décembre ?

Merci Max

9voto

PerlDuck Points 12079

Je ne pense pas que ce soit possible avec cron seul car la syntaxe ne permet pas permet pas "à 27 ans th sauf le dimanche" . Il permet seulement pour "soit 27 th ou non-dimanches (ou les deux) " .

Je suggère soit de changer command.sh pour sortir immédiatement en dehors des dimanches ou de mettre ce chèque dans le cronjob :

1 0 27 12 *   test $(date +\%u) -ne 7   &&  command.sh

Dans le Shell, date +%u renvoie le jour de la semaine (1 7, 1 étant le lundi). En un cronjob nous devons échapper à cette % signe ( \% ). La commande va vérifiera si le jour actuel n'est pas un dimanche et n'exécutera qu'alors command.sh .

Le cronjob sera exécuté tous les 27 décembre. th à 00:01 heure, quel que soit le jour de la semaine, mais seulement pour les jours autres que le dimanche. command.sh est exécuté parce que le test précédent ne réussit que que pour eux.

Note : J'utilise parfois https://crontab.guru pour vérifier les horaires de mon cronjob. C'est assez pratique.
Votre définition se traduit par "A 00:01 le jour du mois 27 y tous les jours de la semaine, du lundi au samedi en décembre". donc c'est tout le contraire de ce que vous voulez.


Desde el page d'accueil :

Note : Le jour d'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 que ne sont pas *), la commande sera exécutée lorsque o bien correspond au champ l'heure actuelle. Par exemple, 30 4 1,15 * 5 ferait en sorte qu'une commande à 4h30 du matin le 1er et le 15 de chaque mois, plus tous les vendredi. On peut cependant obtenir le résultat souhaité en ajoutant un test à la commande (voir le dernier exemple dans EXEMPLE DE FICHIER CRON ci-dessous).

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X