cfschedule:如果找不到url,则触发onError函数



我们有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.cfmonError函数没有被触发。我们只是"偶然地"偶然发现我们所有的任务从那以后都没有执行过。

test.txt日志文件中,我们发现了消息"连接超时"。不该onError函数警告我们如果出现这种情况?或者是否有任何解决方案,以便我可以检查即将写入日志文件的文本?eventHandleronTaskEnd函数只允许有参数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>

相关内容

  • 没有找到相关文章