如何确定计划任务是自动运行还是在浏览器中运行?

时间:2012-12-20 17:57:49

标签: coldfusion scheduled-tasks coldfusion-9 cfadmin

我正在运行一些代码作为计划任务,在CF管理员中设置。

有没有办法在代码中告知代码是作为计划任务运行的,是通过单击CF管理员计划任务区域中的运行图标来运行的,还是直接在浏览器中调用?

添加其他变量不起作用?

1 个答案:

答案 0 :(得分:6)

从CF管理员的测试链接

如果您询问是否可以通过单击coldfusion管理中的测试链接或按计划运行来识别手动运行的计划任务之间的差异,则可以启用计划任务的记录。只要用户运行任务,日志条目就会显示[name of job] Executing because of user request at {timestamp}。如果它自然运行,则日志条目将显示[name of job] Executing at {timestamp}

我已经找到了一种通过代码判断的方法,但我找不到任何东西。这取决于调度程序的准确性,但您可以查看now()是否等于计划的时间。像(伪代码):

<!--- disclaimer: I've heard stories that cfschedule sometimes runs a little late --->
<cfset scheduleTime = "2:00 am">
<cfif cgi.HTTP_USER_AGENT eq "CFSCHEDULE" and timeFormat(now(), "h:mm tt") eq scheduleTime>
   <!--- ran naturally --->
<cfelse>
   <!--- ran by force --->
</cfif>

从浏览器

如果您想知道您的计划任务是否按计划运行,或者该文件是否被浏览器命中,您可以查看cgi.HTTP_USER_AGENT。如果它由调度程序运行,它将等于CFSCHEDULE,否则它将等于客户端设置发送的任何内容。

也许,Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11

或者如果你有幸有机器人击中它,就像:Mozilla/5.0 (compatible; MJ12bot/v1.4.3; http://www.majestic12.co.uk/bot.php?+)

可能欺骗客户端或服务器请求以使用户用户代理说CFSCHEDULE但不太可能。

旁注......

如果您感兴趣,cfhttp的默认用户代理是“COLDFUSION”。