我们有许多 Windows 计划任务在集群中的一个 Server 2008 Web 服务器(不是 R2)上运行。
我们最近从原始的 Web 服务器集群迁移到新的 Web 服务器集群(Server 2008 - 不是 R2)。
我们认为,运行 Windows 任务的新 Web 服务器(在集群中)的设置与原始服务器的设置相同。
但是我们现在发现,在新的 Windows Server 上,Windows 任务计划程序似乎想要立即启动每个任务三次。
如果我们设置选项来排队新任务,我们会得到:
事件 ID 324 任务计划程序将任务“\Client Reporting”的实例“{9a1a8411-b042-45ff-8e6b-89874df230d7}”排入队列,并将在实例“{2bcc3df6-ea3b-4453-90c2-75b8b1946388}”完成后立即启动它。
如果我们设置选项来停止现有任务,我们会得到:
事件 ID 323 任务计划程序停止任务“\Client Reporting”的实例“{e685a910-b32b-414e-85fd-96bbe54314a2}”,以启动新实例“{4db66265-1f51-4ede-8535-ac7c3cb5c4c1}”。
勾选的设置:
允许按需运行任务。
在错过预定的开始时间后尽快运行任务。
如果运行时间超过 1 小时则停止任务。
如果正在运行的任务没有按请求结束则强制其停止。
仅当计算机使用交流电源时才启动任务。
如果计算机切换到电池供电,则停止任务。
选定的选项:如果任务已经在运行 - 停止现有实例。
注意:我们将任务从集群中的一台服务器移到另一台服务器,以查看是否是我们选择的特定服务器上的任务计划程序导致了问题。行为相同。
这可能与新服务器的建设有关吗?
我们在另一个服务器集群上设置了非常相似的任务,这些任务无需启动所有这些任务即可正常工作。将这些任务与此处的任务进行比较 - 就任务计划程序中的选项可用的设置而言,似乎没有任何明显不同。
触发器:该任务计划每天触发一次,每小时一次 - 如果超过此时间则停止。
操作:运行.bat 文件。
可能是什么原因导致这种情况/我们可以在哪里查看是什么逻辑导致任务以这种方式多次启动?
答案1
这是KB2617046:如果您禁用然后启用计划任务,则会创建重复的触发器。任务属性仍然只显示一个触发器,但您可以在任务历史记录中看到该任务同时被多次触发。
Microsoft 提供了修补程序。该修补程序声称适用于 Vista,但它也适用于 Server 2008 SP2。应用修补程序后,您必须禁用然后重新启用任务上的触发器(关闭触发器属性窗口以应用更改),以便删除重复项。
答案2
我们通过勾选选项“如果任务失败,则每隔:重新启动一次:”以及默认值“1 分钟”和“尝试重新启动最多:3 次”,成功阻止了 Windows 任务计划程序启动多个进程。
这似乎是违反直觉的,因为
- 这些任务似乎没有失败(它们执行的操作已运行多次)
2. 无论如何,这些任务似乎已经决定开始三次了。
另外 - 我们在测试网络服务器上设置了这些相同的任务,并且不需要勾选此选项。
答案3
无论出于什么原因,我都无法在您的答案中添加评论,但是它很可能“失败”,因为任务返回的退出代码不是 0。您可以通过安排脚本运行而不是实际任务流程来解决此问题。您可以让脚本运行实际的任务流程,并在完成后根据已知成功代码列表检查流程的退出代码。如果成功,让脚本以代码 0 退出,如果不成功,则传递失败退出代码。这样,您仍然保留任务调度程序在任务实际失败的情况下重新运行任务的能力。
不幸的是,成功执行的进程返回除 0 之外的退出代码的情况并不少见。您需要查看文档(或询问开发人员)了解各种退出代码是什么。
答案4
十多年后......我们发现了与 OP 描述的相同的问题,但在我们的案例中,这只是一个简单的问题,只需手动运行作业本身即可查看它是否真的有效!
事实证明它没有成功,并因 JSON 格式文件错误而中止。无需创建单独的 BAT/CMD 脚本来运行 EXE。我们只是修复了程序和 JSON 文件中的错误,它运行良好,没有出现描述的多个运行问题。
必须记住,如果您调用的原始程序出现错误而失败,任务计划程序将尝试一次又一次地运行。