【发布时间】:2014-02-20 23:41:20
【问题描述】:
在工作中,我们的任务是实施调度系统。我们当前的要求要求我们安排 2 类任务:
- 将在特定时间执行一次的任务:“在 2014-01-28T10:35:08+00:00 向以下设备发送批量推送通知”
- 重复任务:“世界标准时间每周一上午 9 点,向以下人员发送摘要电子邮件”
任务本身都是需要执行的命令行应用+参数。
到目前为止,我们已经使用cron 实现了重复任务,但从长远来看,这还不够,因为我们希望变得更强大:
- 我们希望作业是事务性的 - 如果机器在作业运行时出现故障,则不应将作业标记为完成。
- 我们希望能够在一个队列中运行多台机器,但每个任务只能由一台机器运行一次
- 我们希望能够轻松查看作业的计划和状态(可能是 Web 界面)。
- 我们希望有一个
CRUDAPI 来管理作业。 - 如果我们出现机器故障并且机器恢复正常,它应该能够找到过期任务并运行它们。
是否有实现此功能的行业标准工具?当我们想要存储数据时,我们使用数据库,当我们想要对项目进行排队时,我们使用队列——调度任务的等价物是什么?
【问题讨论】:
-
我的一个(疯狂?)想法是使用 Google 日历 API 来存储/添加/查看任务,并使用第二个系统轮询日历以查找应执行的任务。
-
这偏离了网站的主题,因为它要求推荐工具。话虽如此,您可以采用多种方法,Windows 计划任务就是其中之一,如果您打算编写代码,则可以使用quartz 库之类的东西
-
我完全愿意编写代码,但在编写任何代码之前,我想检查一下我是否会重新发明轮子。 (“数周的编程可以为你节省数小时的计划时间。”)你能推荐一个更好的堆栈交换吗?
-
我相信 Quartz.net 是一个不错的起点(我自己没用过)。不幸的是,“建议一个”问题往往是基于意见的,它们并不是 SE 网络的一部分 stackoverflow.com/help/dont-ask
-
quartz-scheduler.org 是正确的链接。引用他们的简介: ... Java ... 从最小的独立应用程序到最大的电子商务系统。 ... 用于执行数十、数百甚至数万个作业的简单或复杂计划; ... Quartz Scheduler 包括许多企业级功能,例如对 JTA 事务和集群的支持。
标签: cron scheduled-tasks job-scheduling