3

我想使用 Coldfusion 10 Scheduler 实现以下目标。

  • 我有一个计划任务说 Task1。Task1 应该连续执行,没有任何时间延迟或重叠。IE

如果 Task1 需要 10 分钟,那么它应该在第 11 分钟再次触发。如果下一次运行需要 20 分钟,那么它应该只在第 21 分钟触发。

请指教。

4

2 回答 2

2

这是可能的,但不是直接的。计划任务可以在“链”中运行另一个任务,但被链接的任务必须是“链”类型的任务。但是,您可以让一个任务通过代码运行另一个任务。

这是您如何设置它的方法。

  1. 设置任务 A 运行一次。
  2. 将任务 B 设置为链式任务。
  3. 将任务 A 配置为在通过 on complete 事件完成时调用任务 B。
  4. 在任务 B 的代码中让它运行任务 A。

这应该创建一个无限循环。但请注意,这可能会导致一些不良行为。您将不得不自我管理错误和失火。此外,如果链循环被中断,您将不得不重新启动它。

您可以设置一个观察者任务来确保链正在运行。如果它似乎失败了,您可以调用任务 B 来启动链。

于 2013-08-08T15:07:08.200 回答
1

以下是要遵循的策略:

1) 创建一个带有字段的表,以跟踪脚本是否正在使用中。示例表:ScheduleStatus,字段:intInUse

2)创建你的脚本。让脚本的第一行检查 intInUse 字段是否为空。如果是,则将其设置为 1 并运行脚本的其余部分。如果该字段不为空,则跳至 cfabort。

3) 脚本完成后,再次将数据库字段标记为 NULL。

4) 将您的计划任务设置为每分钟运行一次。它将每分钟执行一次,如果脚本正在使用中,它将中止。

可能有其他方法可以做到这一点,通过循环等......但这可能是最简单的。

我将类似的东西用于发送定制时事通讯的排队系统。

于 2013-08-08T12:23:39.180 回答