我们有一个 CF2016 实例,它运行所有计划任务。这个特定任务每天凌晨 4:45 运行。周一到周六,任务运行得很快,但周日运行需要一段时间(这是预期的),平均大约 60 分钟。
问题在于,周日,该任务被触发了两次。第一次是在凌晨 4:45,和往常一样,第二次是在 9 分 28 秒后触发的,而第一个请求尚未完成并且仍在运行。当它们同时运行时,这会给我们带来数据问题。两个请求最终都会完成。
我检查过的内容:
- 没有其他计划任务调用相同的 URL 或引用此任务。
- 该任务通过 设定了 3 小时的超时时间
cfsetting
,但未达到该时间。我们还有其他运行时间更长的任务,但没有出现同样的问题。 - 已验证
Retry Count
计划任务上的 CFAdmin 设置是否设置为 0。 - 在 CFAdmin 日志中,我看到了
Starting HTTP request
第一个请求的日志,但没有看到第二个请求的日志。我知道第二个任务以某种方式被触发,因为我们已将日志记录到onRequestStart
该日志中CGI.SCRIPT_NAME
,并且它记录了两个请求。 - 所有任务都通过内部网络 IP 地址、通过 http(不是 https)调用。
环境是Windows 2008 R2 Enterprise,CF2016 Enterprise
这是怎么发生的?为什么会发生这种情况?有什么方法可以诊断为什么会触发第二个请求吗?
答案1
尝试使用服务器设置 > 添加/编辑计划任务中指定的超时。指定“超时(以秒为单位)”的值
答案2
对于不应并行运行的计划任务,您可以使用 Exclusive CFLOCK,这将允许每次只执行一次。请参阅https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-tags/tags-jl/cflock.html
至于故障排除 - scheduler.log 说了什么,你能看到它在那里执行了两次吗?我认为计划任务在失败时有 3 次重试尝试。周日任务是否顺利完成?