Cron pour courir tous les 2 mercredis?


9

J'ai besoin de trouver un moyen de créer un travail afin qu'il s'exécute tous les deux mercredis du mois. Est-ce possible?

linux  cron 

1
Cette question cherche à fournir une réponse appropriée.
scurker

1
Oui, mais cette question concerne le mardi, pas le mercredi;) La réponse acceptée est cependant intelligente.
edoloughlin

>> Oui, mais cette question concerne le mardi, pas le mercredi;) La réponse acceptée est intelligente, cependant ... qu'est-ce qui est si difficile de changer le mardi en mercredi?
ajreal

0 * * * 3 test $ (date \ +% u) -eq 3 && echo "start run me" essayez ceci. n'a pas collé à la réponse, car une question de base est assez vague.

Réponses:


14

Ma page de manuel pour crontab (que je n'arrive malheureusement pas à trouver en ligne) donne l'exemple suivant:

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

L'adaptation à vos besoins ...

0 4 8-14 * *    test $(date +\%u) -eq 3 && job.sh

3
Pour toute personne souhaitant modifier cette réponse, la raison pour laquelle vous n'utilisez pas uniquement le champ jour de la semaine est que si le jour du mois et le jour de la semaine sont restreints (c'est-à-dire ne le sont pas *), la commande s'exécutera lorsque l'un ou l'autre correspond .
Hasturkun


1
J'ai trouvé que je devais échapper au% u, donc:date +\%u
Antony D'Andrea

3

Vous pouvez éviter d'exécuter un script externe en utilisant une combinaison de l'astuce du jour de la semaine et du jour de la semaine:

# Run on every second Wednesday of the month
0 4 8-14 * Wed job.sh

Cela évite également d'exécuter un autre programme externe. Le 8-14 sélectionne tous les jours qui correspondent à la deuxième semaine du mois. Ensuite, il filtre juste ce mercredi.


1

Il n'est pas possible d'utiliser cron seul, mais vous pouvez appeler un script une fois par semaine pour effectuer le test:

Dans crontab, exécutez second_wed.sh à 12h00 tous les mercredis:

0 12 * * 3 /home/you/bin/second_wed.sh

Dans second_wed.sh:

#!/usr/bin/env bash
day_of_month=`date +"%
if [ $day_of_month -gt 7 -a $day_of_month -lt 15 ]; then
  # Call your program here instead of 'ls'…
  ls
fi

1

Sur la base de cette réponse, vous pourriez faire:

00 12 * * Wed expr `date +\%d` \> 7 \& `date +\%d` \< 15 >/dev/null && runJob.sh

1

Pour les serveurs CentOS 7, cela semble être la syntaxe qui fonctionne pour moi. Veuillez noter les espaces autour du [et ]. Cela m'a pris du temps à comprendre.

Cela exécute le test.shfichier à 13h07 / 13h07 le deuxième mercredi du mois. (0 = dimanche, 1 = lundi, 2 = mardi, 3 = mercredi, etc.)

07 13 8-14 * * [ `date +\%u` = 3 ] &&  /root/scripts/test.sh

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.