1

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

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

添加其他变量不起作用?

4

1 回答 1

6

来自 CF admin 中的测试链接

如果您询问是否可以通过单击 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”。

于 2012-12-20T18:48:22.663 回答