Je voudrais exécuter un travail à partir de cron à 8h30 le premier lundi de chaque mois. La page Wikipedia cron dit
Alors que normalement le travail est exécuté lorsque les champs de spécification d'heure / date correspondent tous à l'heure et à la date actuelles, il y a une exception: si les deux "jour du mois" et "jour de la semaine" sont restreints (pas "*"), alors soit le champ "jour du mois" (3) ou le champ "jour de la semaine" (5) doit correspondre au jour en cours.
(mon accent)
Est-ce à dire que je ne peux pas faire le premier lundi du mois, je peux seulement faire le premier (ou autre) jour du mois? Je ne vois pas de solution.
Réponses:
Vous pouvez mettre la condition dans la commande crontab réelle:
Maintenant, si cette condition est vraie l'un des sept premiers jours d'un mois, vous avez son premier lundi. Notez que dans la crontab, la syntaxe en pourcentage doit être échappée cependant:
Remplacez la
echo
commande par la commande réelle que vous souhaitez exécuter. J'ai également trouvé une approche similaire .la source
[ "$(date '+%a')" = "Mon" ] && echo "It's Monday"
comme le fait[ $(date '+%a') = "Mon" ] && echo "It's Monday"
Mais, dans la crontab, il semble échouer à ce test. Je ne peux pas non plus obtenir de commentaires utiles de cron: j'essaie[ "$(date '+%a')" = "Tue" ] >> /home/deploy/cron.log 2>&1
de capturer toute sortie d'erreur dans un journal, mais cela ne fonctionne pas non plus: /date
sortie est correcte? Par exemple, laissez simplement unecron
commande s'exécuter qui produit cela dans un fichier:date '+%a' > ~/datetest 2>&1
- puis vérifiez si cela a abouti à la bonne chaîne de comparaison.+%a
besoin échapper quand il était dans la crontab, à savoir la ligne devait être celle - ci:[ "$(date '+\%a')" = "Mon" ] && echo "It's Monday"
. Si vous pouviez mettre à jour votre réponse, cela serait utile aux futurs lecteurs :) Merci encore - maxJ'ai un ordinateur avec des paramètres régionaux en espagnol, donc cette approche ne fonctionne pas pour moi car mon passe à lun
D'autres langues échoueraient également, alors j'ai fait une légère variation sur la réponse acceptée qui supprime la barrière linguistique:
la source
Je trouve cela plus facile lorsqu'il n'est pas nécessaire de gérer les numéros de jour.
Exécuter le premier lundi du mois:
c'est-à-dire si le mois 1 il y a une semaine n'est pas le même que le mois en cours alors nous sommes le 1er jour 1 (= lundi) du mois.
De même, pour le troisième vendredi
c'est-à-dire si le mois il y a 3 semaines est différent du mois en cours alors nous sommes le 3ème jour 6 (= vendredi) du mois
la source
J'ai planifié un travail à exécuter le 4e lundi de chaque mois à 16h00 comme suit:
la source
Pour autant que je sache, il n'est PAS possible d'utiliser uniquement crontab, mais on peut utiliser une fonction wrapper pour choisir le jour correct à partir d'une entrée de contab "sept premiers jours du mois"; voir cela de l'entrée.
Le script wrapper serait
et vous devrez l'exécuter (en supposant qu'il s'appelle wrapper.sh et qu'il soit disponible dans le monde entier) en utilisant l'entrée crontab
la source
Sur Solaris 10, j'ai dû formater la condition comme suit:
la source
Vous pouvez essayer d'exécuter cronjob pendant les sept premiers jours du mois et ne l'exécuter que le lundi.
Ci-dessus devrait fonctionner pour vous.
la source
Je recommande d'utiliser
au lieu de
pour éviter les problèmes de localisation.
la source
J'ai fait une solution générale pour ce genre de problèmes, ça marche pour les premier, deuxième, troisième ..... dernier jour de semaine du mois.
Vous pouvez l'utiliser comme ceci:
Le script run-if-today vérifie à la fois le jour de la semaine et la plage de dates de la semaine souhaitée, si les deux correspondent, il renvoie 0, sinon 1.
Vérifiez le code ici. https://github.com/xr09/cron-last-sunday
la source
Je crois que cela résout le problème plus élégamment:
la source
Puisque j'interprète mes instructions cron en utilisant php et js, je ne peux pas utiliser bash. Enfin , je trouve qu'il est en effet possible avec Cron juste:
J'espère que ceci aide quelqu'un d'autre. Quoi qu'il en soit, je vous souhaite à tous une belle journée. :-)
la source
Cela fonctionnera tous les lundis de chaque mois.
la source