16 votes

Cron pour fonctionner tous les deux mercredis ?

J'ai besoin de trouver un moyen de programmer une tâche de manière à ce qu'elle soit exécutée tous les deux mercredis du mois. Cela est-il possible ?

2 votes

Ce site pregunta cherche à fournir une réponse appropriée.

1 votes

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

0 votes

>> Ouais, 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 ?

21voto

dnord Points 606

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"

En adaptant cela à vos besoins...

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

7 votes

Pour toute personne souhaitant modifier cette réponse, la raison pour laquelle vous n'utilisez pas simplement le champ du jour de la semaine est que si le jour du mois et le jour de la semaine sont tous deux restreints (c'est-à-dire s'il n'y a pas d'obligation d'utiliser le champ du jour de la semaine), le champ du jour de la semaine ne peut être utilisé. * ), la commande sera exécutée lorsque l'un ou l'autre matches.

0 votes

1 votes

J'ai découvert que je devais échapper au %u, donc : date +\%u

5voto

eglescout Points 31

Pour les serveurs CentOS 7, cette syntaxe semble être celle qui fonctionne pour moi. Veuillez noter les espaces autour de l'élément [ y ] . Cela m'a pris un certain temps pour le comprendre.

Cela permet d'exécuter le test.sh à 13:07 / 1:07PM 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

0 votes

Cela fonctionne pour moi sur CentOS 8 Stream aussi, merci.

1voto

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

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

0voto

Apocalisp Points 22526

Ce n'est pas possible en utilisant cron seul, mais vous pourriez appeler un script une fois par semaine qui fait le test :

Dans la crontab, exécutez second_wed.sh à 12h00 chaque mercredi :

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

Dans second_wed.sh :

#!/usr/bin/env bash

#get day of month
day_of_month=`date +%d`

#if this day is between 7th and 15th day of the month = 2nd week
if [ $day_of_month -gt 7 -a $day_of_month -lt 15 ]; then
  # Call your program here instead of 'ls'…
  ls
fi

0voto

Luke Points 101

Feu à 10h15 le troisième vendredi de chaque mois : 0 15 10 ? * 6#3

Source : https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

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