我们正在尝试为我们的 cron 作业构建一个仪表板 ---- CF、Java、SQLServer 等。这样我们就可以看到上次运行的时间、结果是什么以及计划下次运行的时间。

有没有办法使用 CFAdmin API 或一些未记录的 <cfschedule> 获取以下列表的技巧:

  1. 安排了哪些任务?
  2. 最后一次运行时间是多少?
  3. 成功了吗?
  4. 预计什么时候再次运行?

我们目前使用的是 CF8,但将在几周内升级到 CF9。

有帮助吗?

解决方案

我为你做了一些研究。我发现一个较旧的参考文献仍然有效,至少在 CF8 中,大概在 CF9 中也是如此。

<cfobject type="JAVA" action="Create" name="factory" class="coldfusion.server.ServiceFactory">
<cfset allTasks = factory.CronService.listAll()/>
<cfloop index="i" from="1" to="#ArrayLen(allTasks)#">
    <cfdump var="#allTasks[i]#" />
</cfloop>

http://www.bpurcell.org/blog/index.cfm?mode=entry&ENTRY=935

这回答了您的问题 #1 和 #4。至于#3,这个问题没有答案。ColdFusion的计划任务引擎只是在规定的时间加载指定的URL。没有成功或失败——它只是执行一个 HTTP 请求。

希望这可以帮助。

其他提示

可以“发布”作业结果。HTTP 请求的响应可以写入文件服务器,其中将包含上次运行作业的值。

<cfschedule action = "update"
    task = "TaskName" 
    operation = "HTTPRequest"
    url = "/index.cfm?action=task"
    startDate = "#STARTDATE#"
    startTime = "12:00:00 AM"
    interval = "Daily"
    resolveURL = "NO"
    requestTimeOut = "600"
    publish = "yes"
    path = "#PATH#"
    file = "log_file.log">

然后,如果需要,您可以根据数据库验证日志。由于它是来自页面的响应,因此您也可以在此处获取并存储错误和警告。

@eric kolb 是对的 - 这就是以编程方式执行此操作的方法。如果您想更好地控制列表的反应方式,请尝试以下代码(本质上相同,但在 cfscript 中):

<cfscript>
scheduledTasksArray=ArrayNew(1);
taskService=createobject('java','coldfusion.server.ServiceFactory').getCronService();
scheduledTasksArray=taskservice.listall();

另外,要回答#2和#3(如果你做得正确的话,这几乎只是一个由两部分组成的问题):当任务运行时,在顶部给自己发送一封电子邮件,内容是“嘿!我正在跑步!!!”然后另一个人说“嘿!我完成了!!!”位于任务代码的底部 - 您也可以添加时间戳来告诉它何时开始和停止(将其记录在数据库中也可以)。另外,要知道下次运行的时间,只需查看上次运行时间以及从 ServiceFactory 调用结果中返回的“间隔”字段即可。(如果您需要进一步解释我的意思,请随时询问。

如果您还没有弄清楚自己需要什么,希望这会有所帮助

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top