检查计划任务的运行状况?

问题描述 投票:0回答:4

我们最近遇到了一个问题,即在 Windows 升级和 CF 服务器重新启动后,ColdFusion 计划任务无法恢复。有没有办法监控计划任务的运行状况,并在它们运行不正常时发出警报?或者我需要编写一个任务来解析日志文件以获取该信息?

coldfusion coldfusion-9
4个回答
5
投票

您可以使用管理 API 来获取有关计划任务的信息。下面返回一个结构数组,其中包含有关每个计划任务的信息。然后您可以循环遍历数组并查看 last_run 变量。

<cfset arySchedTasks = createobject("java","coldfusion.server.ServiceFactory").getCronService().listall() />

0
投票

如果您想检查计划任务是否在最一般的级别上运行,一种方法是安排一个“心跳”任务,按照您希望的频率运行。设置任务来更新计数器、更改时间戳、发送电子邮件、每天早上触发“我还活着”短信、添加日志条目 - 任何有意义的事情。这不会告诉您所有任务都在运行,但它会告诉您服务器处于活动状态,并且计划任务系统本身正在工作。

另一种选择是通过单一入口点(一种任务的前端控制器)来集中您的任务。这会将各个任务的设置和配置委托给您的代码,而不是 CF 管理员。您的主任务控制器将包括每个任务的触发代码。安排控制器根据需要频繁运行——因此,只执行一项任务,而不是多项任务。在控制器中,类似这样的事情,也许每五分钟一次:

Check the time/date, compare against set of tasks
If time (or frequency) is A, run tasks P,Q,R, log success/failure
If time is B, run tasks S,T, log success/failure
If time is C, run tasks U,V,X, log success/failure    
Send heartbeat with success/failure codes for all relevant tasks

这种方法的一个优点是,您可以表达更丰富的执行/不执行工作流程 - 让任务以半随机频率运行,根据其他任务的成功或失败运行任务等。如果您看到/收到心跳指示器,你知道你的任务控制器确实运行了。


0
投票

另一个简单的选择。为每个任务启用输出文件,并通过独立的 Cron 作业检查这些文件:如果文件在要求的时间范围内发生更改,则意味着调度程序任务已执行。


0
投票

用户给出的关于找出正在运行的进程的建议非常出色。

使用此功能,我发现当我通过将 neo-cron.xml 从一台服务器复制到另一台服务器将计划任务从一台服务器移动到另一台服务器时,许多进程停止处理。当我使用计划任务列表查看进程时,我注意到正在运行的进程在密码字段中没有加密密码,而未运行的进程则具有加密密码,这会阻止进程运行,因为当进程运行时,它无法解密 neo-cron.xml 文件中的密码(因为它们来自不同的服务器,因此解密不起作用)。为了解决这个问题,我打开neo-cron.xml文件,手动取出每个配置文件密码部分中的所有密码,然后保存并用其中的密码替换该文件,然后重新启动CF服务。重新启动后,进程又开始自行运行。

我想分享这个以防其他人遇到同样的问题。如果您的任务在移动服务器后开始,请检查以确保 neo-cron.xml 文件中没有存储任何密码。

我花了很长时间才弄清楚这一点,所以希望这对其他人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.