我需要一些帮助来创建一个使用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
答案 0 :(得分:1)
我认为逻辑本身是错误的。
实际上你想要做两件事:
首先创建一个文件来调用它一次。那个文件 - 比如说 - 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">
当您将其设置为运行时,这将使任务运行。这并不是你所期望的最直观的事情,因为设置它会在你设置时运行它。