Разобрать / оценить / сгенерировать CrontabExpressions вне linux? - PullRequest
1 голос
/ 03 января 2012

Я создаю какое-то программное обеспечение, для которого требуется ввод расписания, и я действительно хотел бы повторно использовать дизайн crontab, потому что он просто работает.

CrontabExpressions может быть действительнопростой */5 * * * * «бегать каждые пять минут» или более сложный 2-59/3 1,9,22 11-26 1-6 ? 2003 «В 2003 году с 11 по 26 числа каждого месяца с января по июнь каждая третья минута начиналась с 2 до 1 часа ночи, 9 утра и 10 вечера».

Я не собираюсь использовать программное обеспечение Linux под названием crontab, я ищу способ, которым я могу правильно оценить эти выражения (например, вывести следующие 25 временных меток, которые соответствуют crontab, или сгенерировать их на основе некоторогоабстрактный графический интерфейс для пользователей).

Я не могу найти библиотеки или функции, которые делают это на JavaScript, PHP или даже на других языках.Если они не существуют, что было бы хорошим способом сделать это?Я уже знаю, что слишком сложное регулярное выражение, вероятно, будет неправильным ответом.Я с трудом нахожу исходный код C в crontab, который также выполняет эту задачу , что заставляет меня поверить, что его здесь может не быть?

Ответы [ 2 ]

1 голос
/ 03 января 2012

Для вывода следующих 25 временных меток, соответствующих crontab, вы можете использовать crontab Модуль Python:

from datetime import datetime, timedelta
import crontab

tab = crontab.CronTab('2-59/3 1,9,22 11-26 1-6 ? 2012')

dt = datetime.now()
for _ in xrange(25):
    delay = tab.next(dt) # seconds before this crontab entry can be executed.
    dt += timedelta(seconds=delay)
    print(dt)

Вывод

2012-01-11 22:41:00
2012-01-11 22:44:00
2012-01-11 22:47:00
2012-01-11 22:50:00
2012-01-11 22:53:00
2012-01-11 22:56:00
2012-01-11 22:59:00
2012-01-12 01:02:00
2012-01-12 01:05:00
2012-01-12 01:08:00
2012-01-12 01:11:00
2012-01-12 01:14:00
2012-01-12 01:17:00
2012-01-12 01:20:00
2012-01-12 01:23:00
2012-01-12 01:26:00
2012-01-12 01:29:00
2012-01-12 01:32:00
2012-01-12 01:35:00
2012-01-12 01:38:00
2012-01-12 01:41:00
2012-01-12 01:44:00
2012-01-12 01:47:00
2012-01-12 01:50:00
2012-01-12 01:53:00

Существует также python-crontab , обеспечивающий модуль crontab, но с более широкими функциональными возможностями (анализ / генерация).

0 голосов
/ 03 марта 2012

В состав Quartz Scheduler входит библиотека Java, которую можно довольно просто использовать для вычисления выражений cron.

Класс CronExpression предоставляет такие методы, как isSatisfiedBy(Date date) или getNextValidTimeAfter(Date date), что очень полезно.

Библиотека находится в свободном доступе.

...