2017-09-28 12 views
0

J'essaie de trouver une expression CRON qui me permettra de programmer un déclenchement de quartz pour fonctionner tous les lundis du mois excepté le le premier.CRON Expression pour tous les lundis dans un mois sauf le premier

Références:

CRON vous permet de spécifier la nième occurrence d'un jour de la semaine facilement. Une expression pour le premier lundi du mois serait:

0 5 0 ? * 2#1 

Lorsque le 2 # 1 représente le premier lundi du mois (2 = jour de la semaine, 1 étant la nième occurrence)

Cependant, si j'essaie de faire quelque chose comme

0 5 0 ? * 2#2-2#5 

OU

0 5 0 ? * 2#2,2#3,2#4,2#5 

Il se plaint du message

Support for specifying multiple "nth" days is not implemented. 

Est-ce que quelqu'un sait comment réaliser cela dans CRON?

+0

Cela semble être un problème commun de ce que j'ai vu. La meilleure réponse semble être un [SimpleTrigger or CalendarIntervalTrigger] (http://www.quartz-scheduler.org/documentation/quartz-2.1.x/cookbook/BiWeeklyTrigger.html). – Jeremy

+2

@Jeremy, même alors il est difficile de réaliser ce cas d'utilisation. La seule façon dont je peux penser est d'avoir plusieurs déclencheurs (un chacun pour 2,3,4,5 lundi dans un mois) – Srinivas

+0

Très bon point. Personnellement, je créerais plusieurs déclencheurs. SimpleTrigger ou CalendarIntervalTrigger était le seul moyen de le centraliser en un seul travail Cron. – Jeremy

Répondre

0

cron ne vous donne pas l'expressivité que vous désirez (a), il est simple de changer la commande elle-même pour ne l'exécuter que dans certaines conditions.

Pour votre cas particulier, vous savez que le premier lundi d'un mois se situe entre le premier et le septième inclus et les lundis suivants doivent être le huitième ou plus tard.

Il faut donc utiliser cron pour sélectionner tous les lundis, mais modifier légèrement la commande pour exclure le premier du mois:

# mm hh dom mon dow command 
    0 1 * * 1 [[ $(date +%u) -gt 7 ]] && doSomething 

Ce travail se déroulera à 1h du matin tous les lundis, mais la charge utile réelle doSomething ne sera exécuté que si le jour du mois est supérieur à sept.

Certaines personnes optent souvent pour mettre le test dans le script lui-même (en supposant qu'il est même un script), mais je ne suis pas un grand fan de cela, préférant garder toutes les informations de planification dans le fichier crontab lui-même.


(a) Ne pas se tromper en pensant que vous pouvez combiner le jour de la semaine et 1 jour du mois 8-31 pour le faire.Selon la page de l'homme, ces conditions sont comparées par des OU (ce qui signifie soit permettra la tâche à exécuter):

Les commandes sont exécutées par cron lorsque la minute, heure, et le mois de champs année correspondent au courant temps, et quand au moins un des deux champs de jour (jour du mois, ou le jour de la semaine) correspond l'heure actuelle

la combinaison de ces deux vont exécuter le travail le premier lundi et chaque jour à partir du huitième.