CFSchedule不能工作两次,寻找ColdFusion停机检查脚本

时间:2012-04-01 15:41:47

标签: coldfusion scheduled-tasks coldfusion-7

我需要一些帮助来创建一个使用ColdFusion的自动计时脚本。每隔60分钟,我想看看我的一台服务器(http://www.mysite.com/ALERT.cfm)上的页面是否正常工作。

如果页面在检查时关闭,那么它将在5分钟后再次检查以查看该页面是否已备份。如果没有备份,我会收到一封电子邮件至email@mysite.com。如果备份,则不需要任何操作,我们再次开始60分钟的循环检查。

我现在明白如何进行一次检查,但不是两次。

所以这是我正在使用的CFschedule代码

<cfhttp url="http://example.com/testpagetocheck.cfm" method="get" >
<cfif cfhttp.statusCode neq "200 OK">
<cfschedule action = "update"
task = "TaskName" 
operation = "HTTPRequest"
url = "http://www.example.com/ALERT.cfm"
startDate = "#createdate(2012,4,01)#"
startTime = "08:00 AM"
interval = "3600"
requestTimeOut = "10">
</cfif>

所以说我有4个页面 - 我要检查的页面是否已经关闭(testpagetocheck.cfm),page1.cfm有上面的代码,ALERT.cfm有cfmail发给我一个如果testpagetocheck.cfm关闭,则消息,然后page2.cfm再次具有上述代码,但间隔为“一次”,开始时间为5分钟。

Page1.cfm to alertMe.cfm就像一个魅力。我收到了一个关闭页面的消息。 Page 2.cfm to alertMe.cfm也很漂亮。它还向我发送一条消息,我正在检查的页面已关闭。但是,当我尝试从page1.cfm转到2.cfm页面到alertMe.cfm时,看起来似乎page2.cfm上的cfschedule没有运行,所以当服务器是dowm时我最终没有收到任何邮件。

有人可以告诉我我做错了什么吗?我正在使用CF7

3 个答案:

答案 0 :(得分:1)

我认为逻辑本身是错误的。

实际上你想要做两件事:

  1. 创建一个计划,以便每次都继续请求页面。
  2. 请求的页面(通过时间表)必须检查某个网站/页面是否已关闭并采取措施。
  3. 首先创建一个文件来调用它一次。那个文件 - 比如说 - createSchedule.cfm 它的工作是仅创建计划。只需编写计划创建代码:

    <cfschedule .... url="http://mysite.com/checksite.cfm" ... />
    

    然后创建每次都要求的检查文件checksite.cfm(由计划任务)。这个文件checksite.cfm应该包括cfhttp调用和if检查,如下所示:

    <cfhttp url="http://mysite.com/thePageYouWantToCheck.cfm" method="get" >
    <cfif cfhttp.statusCode neq "200 OK">
    <!--- send the email here, or just include the Alert.cfm file that will do --->
    </cfif>
    

    最后,只需调用文件createSchedule.cfm来安排任务继续请求checksite.cfm,它将执行cfhttp检查并采取措施。


    如果所有这些cfm文件都在一个CFServer上运行,那么如果服务器出现故障。所有这些都行不通,我的意思是你永远不会得到警报。 只有当PageYouWantToCheck.cfm发生错误或者它正在其他CFServer上运行时,Bul才会获得警报,在这种情况下,即使CFServer发生故障,您也应该收到警报。

    现在..有许多网站提供此服务(Site Down Check)。有些是有偿的,有些是免费的。我长期使用的最好的免费是这样的: http://www.uptimerobot.com/ 它只是免费提供非常好的功能,请检查它。

答案 1 :(得分:0)

<cfschedule action = "update"
task = "TaskName" 
operation = "HTTPRequest"
url = "http://www.mysite.com/ALERT.cfm?call=2"
startDate = "#createdate(2012,4,01)#"
startTime = "08:00 AM"
interval = "3600"
requestTimeOut = "10">

当您在该基础上的页面传递参数call = 2中设置计划任务时,无论是否需要通过电子邮件发送,都可以设置条件。

但我很惊讶您正在调用CFM页面来检查CFM页面是否已关闭。如果coldfusion已关闭,那么您的日程安排任务将永远不会打电话,除非您只是检查alert.cfm超时或其他500错误,否则您将永远不会收到电子邮件。

答案 2 :(得分:0)

我第一次使用cfschedule时遇到了一些麻烦。当您运行cfschedule标记时,这只会创建任务(如果它不存在)/如果它存在则更新它。创建/更新任务后,您需要执行以下操作:

<cfschedule action="run" task="taskName">

当您将其设置为运行时,这将使任务运行。这并不是你所期望的最直观的事情,因为设置它会在你设置时运行它。