如何在 ColdFusion 中获取计划任务列表和上次运行结果?

Posted

技术标签:

【中文标题】如何在 ColdFusion 中获取计划任务列表和上次运行结果?【英文标题】:How to get list of scheduled tasks and last run results in ColdFusion? 【发布时间】:2011-01-20 04:40:27 【问题描述】:

我们正在尝试为我们的 cron 作业构建仪表板 ---- CF、Java、SQLServer 等,以便我们可以看到上次运行的时间、结果以及计划执行的时间接下来运行。

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

    安排了哪些任务? 上次运行时间是多少? 成功了吗? 计划何时再次运行?

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

【问题讨论】:

好问题。我很想得到同样的信息。 您的仪表板是否有可能最终出现在 riaforge 上?听起来不错 【参考方案1】:

我为您做了一些研究。我发现了一个更旧的参考,它仍然有效,至少在 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 请求。

希望这会有所帮助。

【讨论】:

很好,+1。我会选择&lt;cfset factory = CreateObject("java", …)&gt;,不过,我觉得这样更容易阅读。 太棒了。正是我想要完成的。我想我会在数据库中创建一个可以保存这些作业的运行/失败状态的表。启动时设置为'running',完成时设置为'success' Railo 3+ 和 CF10+ 提供 list 操作:&lt;cfschedule action="list" returnvariable="qTasks"&gt; @modius 实际上是&lt;cfschedule action="list" mode="server|application" result="qTasks"&gt;,模式是可选的,默认为服务器【参考方案2】:

可以“发布”作业结果。来自 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">

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

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

以上是关于如何在 ColdFusion 中获取计划任务列表和上次运行结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ColdFusion中获取POST数据

在 ColdFusion 中如何使用 in 变量获取 Oracle 存储过程以返回值?

如何获取需要在 Synology NAS 的任务计划程序中运行的第 3 方库的 python 脚本?

如何获取批处理脚本的任务计划程序上次运行结果退出代码?

如何在 gulp 中获取可用任务列表

如何从Array Coldfusion中删除重复值