1

我正在构建一些需要调度输入的软件,我真的很想重新使用 crontab 的设计,因为它很简单。

CrontabExpressions可以非常简单的*/5 * * * *“每五分钟运行一次”或更复杂2-59/3 1,9,22 11-26 1-6 ? 2003的“2003 年 1 月至 6 月的每个月的 11 日至 26 日,从凌晨 1 点、上午 9 点和晚上 10 点开始每隔三分钟运行一次”。

我不打算使用名为 crontab 的 linux 软件,我正在寻找一种可以正确评估这些表达式的方法(例如,输出与 crontab 匹配的接下来的 25 个时间戳,或者基于一些抽象的 GUI 为用户生成它) .

我真的找不到任何用 JavaScript 或 PHP 甚至其他语言执行此操作的库或函数。如果它们不存在,那么这样做的好方法是什么?我已经知道过于复杂的正则表达式可能是错误的答案。我很难在 crontab 中找到执行此任务的 C 源代码,这让我相信它可能不会在这里发生?

4

2 回答 2

1

要输出与 crontab 匹配的下 25 个时间戳,您可以使用crontabPython 模块:

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模块但具有更丰富的功能(解析/生成)。

于 2012-01-03T16:52:31.940 回答
0

作为Quartz Scheduler的一部分,有一个 Java 库可以用来很容易地评估 cron 表达式。

该类CronExpression产生类似isSatisfiedBy(Date date)getNextValidTimeAfter(Date date)非常有用的方法。

该库是免费提供的。

于 2012-03-03T12:08:04.293 回答