2

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

4

3 回答 3

5

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

<cfset arySchedTasks = createobject("java","coldfusion.server.ServiceFactory").getCronService().listall() />
于 2010-10-19T19:03:28.507 回答
0

Another simple option. Enable the output file for each task and check these files by independent Cron job: if file was changed within required time span should mean that scheduler task was executed.

于 2010-10-20T12:13:42.017 回答
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

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

于 2010-10-19T19:21:16.530 回答