我们有ColdFusion任务定义如下:
<cfschedule
action="update"
task="Test"
operation="HTTPRequest"
url="#path.getFileFolder()#tasks/test.cfm"
startDate="#now()#"
startTime="00:00"
interval="daily"
resolveURL="no"
publish="yes"
file="test.txt"
path="#path.getLogFolder#"
eventHandler="tasks.eventHandler"
onException="invokeHandler">
eventHandler
中的onError
函数是这样的:
<cffunction name="onError" returntype="void">
<cfargument name="context" type="struct" required="false" />
<cfscript>
var slackHookURL = 'urlToOurSlackErrorChannel';
var slackMessage = 'ourSlackMessage';
</cfscript>
<cftry>
<cfhttp url="#slackHookURL#" method="post" result="httpResp" timeout="60">
<cfhttpparam type="header" name="Content-Type" value="application/json" />
<cfhttpparam type="body" value="#slackMessage#" />
</cfhttp>
<cfcatch></cfcatch>
</cftry>
</cffunction>
我们遇到的问题是,在服务器切换后,我们的config
文件在文件文件夹路径中错过了/
。所以我们所有任务中引用的url都指向https://ourPagetasks/test.cfm
而不是https://ourPage/tasks/test.cfm
。onError
函数没有被触发。我们只是"偶然地"偶然发现我们所有的任务从那以后都没有执行过。
在test.txt
日志文件中,我们发现了消息"连接超时"。不该onError
函数警告我们如果出现这种情况?或者是否有任何解决方案,以便我可以检查即将写入日志文件的文本?eventHandler
的onTaskEnd
函数只允许有参数context
,它没有告诉我要记录什么。
我希望我以某种方式解释了我的问题。提前感谢!
我设法实现一个解决方案。在我们的scheduledTasks.cfm
中,我在末尾添加了以下行,以检查urls
中是否有无效的:
<!--- Check if the tasks are defined correctly --->
<cfschedule action="list" mode="server" result="tasks" />
<cfloop query="tasks">
<cfhttp method="head" url="#tasks.URL#" />
<cfif len(cfhttp.errorDetail)>
<cfscript>
slackHookURL = 'urlToOurSlackErrorChannel';
slackMessage = 'ourSlackMessage';
</cfscript>
<cftry>
<cfhttp url="#slackHookURL#" method="post" result="httpResp" timeout="60">
<cfhttpparam type="header" name="Content-Type" value="application/json" />
<cfhttpparam type="body" value="#slackMessage#" />
</cfhttp>
<cfcatch></cfcatch>
</cftry>
</cfif>
</cfloop>