【问题标题】:How do I determine if a scheduled task was ran automatically or ran in a browser?如何确定计划任务是自动运行还是在浏览器中运行?
【发布时间】:2012-12-08 07:22:26
【问题描述】:

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

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

添加额外的变量不起作用?

【问题讨论】:

  • 你的问题我不清楚。你说的是计划任务吗?并判断定时任务是否运行?
  • 我在询问 cf admin 中的计划任务。不是真的确定是否运行了计划任务,而是确定它是从 CF ADMIN 运行而不是从浏览器运行
  • 那么,您想如何存储有关其运行方式的信息?您可以在 CF 计划任务的 url 上添加一个 urlflag,上面写着“&cfadmin=1”,然后有一些逻辑来查找这个标志并使用 CFLOG 记录任一条件。
  • 我试图澄清这个问题 - 请确认它是否仍然在问你想知道的同样的事情......

标签: coldfusion scheduled-tasks coldfusion-9 cfadmin


【解决方案1】:

来自 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”,如果您感兴趣的话。

【讨论】:

  • 您能否确认 CFSCHEDULE 是仅在自动运行计划任务时使用,还是在手动调用任务时也使用(通过管理员运行图标)?如果是这样,手动调用任务与直接调用 URL 有区别吗?
  • 我手动尝试并等待它自然运行,两者都是“CFSCHEDULE”。好问题,彼得。
  • 我做了更多的窥探,并添加了一些希望更有用的信息。
  • 问题实际上是说cf admin中的运行图标
  • 另外,您可以使用the code here 获取实际时间,而不是硬编码时间。
猜你喜欢
  • 2013-08-06
  • 2019-11-07
  • 2020-07-16
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 2012-02-15
  • 2017-03-27
相关资源
最近更新 更多