【问题标题】:What is the best way to specify execution time of recurring jobs or tasks?指定重复作业或任务的执行时间的最佳方法是什么?
【发布时间】:2010-09-25 12:29:22
【问题描述】:
我正在寻找一种有效指定重复作业执行时间的方法,而无需将显式执行时间写入数据存储。换句话说,与其说“作业 x 下一个在 11.12.08 下午 13:00 运行”,然后必须在作业运行后更新下一周的执行时间,我希望能够说“作业 x 运行在每个星期四下午 13 点”。我需要能够指定从几分钟到每月一次的任何重复范围。我的猜测是复发期越短,这就越困难。有什么想法吗?
注意:我不是在寻找有关调度机制的建议。我无法使用 Windows 调度程序、Cron 或创建 Windows 服务(我别无选择,只能在 ASP.NET 中使用后台线程)。
【问题讨论】:
标签:
.net
logic
scheduled-tasks
recurrence
【解决方案1】:
我已经看到 cron 表达式被广泛用于执行此操作,它可能作为一种内部表示格式工作得很好。
【解决方案2】:
我同意 kamal 的观点,即 Cron 可能是配置调度程序的最简单的解决方案。它非常灵活 - 您可以将其配置为做任何事情(在合理范围内)。
我过去曾使用Quartz.NET 进行调度。它提供了一个 CronTrigger - 请参阅教程。您可以在运行 Quartz 调度程序的 Web 应用程序中创建一个线程。
【解决方案3】:
我实现了一些无人值守的服务(用 c# 编写的 Windows 服务),使用 cron 来管理调度。该模式功能强大且灵活。我们可以在任何时间创建计划,只使用 cron 表达式。也许我错了,但我认为 cron 唯一没有涵盖的时间表是如果我们想要一个月的最后一天,但这从来都不是所有服务的要求。
我从互联网上的一篇文章(由 Atif Aziz 开源)中复制了 cron 算法,并在我的实用程序类中实现,多年来运行良好。
在我的博客中查看更多详细信息:
CronTab schedule parser algorithm
干杯!
罗伯托