Question

Ce qui est un moyen efficace de calculer la prochaine fois que l'exécution d'un événement donné l'heure actuelle et une spécification cron?

Je cherche autre chose que « boucle à travers tous les contrôles minutes si elle correspond spec ».

Exemples de spécifications peuvent être:

  • Chaque mois, le 1er et le 15 à 15h01
  • A 10,20,30,40,50 minutes après l'heure toutes les heures

code Python serait beau mais le code ou la description psuedo de haut niveau serait également apprécié.

[Mise à jour] On suppose que la spécification est déjà analysée et est dans un format raisonnable.

Était-ce utile?

La solution

Il suffit de regarder, je pense que vous devez:

  • analyser les spécifications de Chron cinq tableaux contenant des valeurs acceptables pour chaque champ;
  • parse 'maintenant' à une valeur pour chaque champ;
  • dans l'ordre de minute, heure, {jour de mois ou le jour de la semaine}, mois de l'année. Trouver la valeur du tableau le plus bas qui correspond ou dépasse la valeur actuelle, la correction pour transporter

Je ne sais pas comment gérer les jours de la semaine et le jour de mois en même temps; Je suis sûr qu'il ya un moyen, mais d'autre part je ne pense pas que je l'ai jamais vu une spécification qui en fait spécifié à la fois. Je pense qu'il serait suffisant d'écrire un gestionnaire pour soit et renvoyer une erreur si vous recevez les deux.

Modifier apparemment si le jour de la semaine et le jour de mois sont tous deux précisé, il est censé tirer sur deux - à savoir si la règle est " 15, mercredi » il se déclenche tous les 15 et tous les mercredis.

Le paquet croniter fait ce que vous voulez:

import croniter
import datetime

now = datetime.datetime.now()
sched = '1 15 1,15 * *'    # at 3:01pm on the 1st and 15th of every month
cron = croniter.croniter(sched, now)

for i in range(4):
    nextdate = cron.get_next(datetime.datetime)
    print nextdate

impressions

2011-01-15 15:01:00
2011-02-01 15:01:00
2011-02-15 15:01:00
2011-03-01 15:01:00

bien qu'il serait bien si elle était écrite comme iterator réelle. Peut-être que j'ai mon prochain projet, -)

Autres conseils

Later.js est une librairie javascript qui fait exactement cela. Il est capable d'analyser une expression Cron, puis calculer les occurrences futures de l'annexe. Il est l'algorithme est pas très luxueux, mais il fait le travail. Peut-être vaut le détour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top