使服务器每天自动运行asp脚本

时间:2012-04-30 11:45:51

标签: sql-server-2008 asp-classic batch-file windows-server-2008

是否可以创建一个打开firefox,运行网站然后再次关闭Firefox的批处理文件?

类似的东西:

@echo off
start firefox http://.....

这是我被困的地方......当网站加载完毕后,需要再次关闭firefix。

它用于每晚23:59运行维护脚本。 该脚本基于本地,但是如果不使用服务器就无法运行asp文件,因此我将其作为网站放置。

2 个答案:

答案 0 :(得分:6)

改编自我几年前在aspfaq.com上写的文章。

使用AT命令和Windows Scripting Host(或更基本的任务调度程序)以特定间隔安排VBS文件。

首先,将ASP更改为VBS文件。这是通过(1)将扩展名改为VBS来实现的; (2)将所有Server.CreateObject调用更改为CreateObject;并且,(3)删除所有<%%>分隔符和任何浏览器目标代码(例如,response.write语句或客户端HTML)。我没有遇到任何进一步的并发症,但是YMMV。

您将VBS文件存储在文件系统中,并使用AT命令对其进行计划(这实际上是使用Windows的计划服务来计划其执行)。在命令提示符下,您可以单独使用AT查看当前计划中的任务列表。你可以使用AT /?找出它的所有语法可能性。

例如,要在每个工作日上午9:00运行文件,我会启动此批处理文件(第一行清除现有条目):       

at /delete /y 
at 9:00 /every:m,t,w,th,f d:\net\shared\getdata.vbs      

请注意,没有涉及Web服务器;该文件直接通过文件系统访问。一旦我克服了“用户必须登录”和“重新启动时必须重置任务”的障碍(我认为这两个都是我们无法控制的特定机器的问题),所有都已经运行对于我来说足够了。

有关使用WSH,CDONTS和任务计划程序定期发送电子邮件的示例,请参阅KB #221495

如果您所做的只是SQL Server中的数据库工作,您可以考虑使用作业。这将允许您在数据库中保留作业的所有处理,并防止与多个系统,连接和调整ASP代码相关的复杂性在行为中与非ASP类似。

答案 1 :(得分:4)

如果您只想在已经存在的网站上调用页面,以下是一种简单的方法来实现它。

Option Explicit
On Error Resume Next

' Declare our vars
Dim objWinHttp, strURL

' Request URL from 1st Command Line Argument.  This is
' a nice option so you can use the same file to
' schedule any number of differnet scripts just by
' changing the command line parameter.
'strURL = WScript.Arguments(0)

' Could also hard code if you want:
strURL = "http://www.example.com/myscript.asp"

' For more WinHTTP v5.0 info, including where to get
' the component, see our HTTP sample:
' http://www.asp101.com/samples/winhttp5.asp
Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5")
objWinHttp.Open "GET", strURL
objWinHttp.Send

' Get the Status and compare it to the expected 200
' which is the code for a successful HTTP request:
' http://www.asp101.com/resources/httpcodes.asp
If objWinHttp.Status <> 200 Then
    ' If it's not 200 we throw an error... we'll
    ' check for it and others later.
    Err.Raise 1, "HttpRequester", "Invalid HTTP Response Code"
End If

' Since in this example I could really care less about
' what's returned, I never even check it, but in
' general checking for some expected text or some sort
' of status result from the ASP script would be a good
' idea.  Use objWinHttp.ResponseText

Set objWinHttp = Nothing

If Err.Number <> 0 Then
    ' Something has gone wrong... do whatever is
    ' appropriate for your given situation... I'm
    ' emailing someone:
    Dim objMessage
    Set objMessage = Server.CreateObject("CDO.Message")
    objMessage.To       = "you@example.com"
    objMessage.From     = "cron job <cron@example.com>"
    objMessage.Subject  = "An Error Has Occurred in a " _
        & "Scheduled Task"
    objMessage.TextBody = "Error #: " & Err.Number & vbCrLf _
        & "From: " & Err.Source & vbCrLf _
        & "Desc: " & Err.Description & vbCrLf _
        & "Time: " & Now()

    objMessage.Send
    Set objMessage = Nothing
End If

strURL更改为您的脚本或取消注释行strURL = WScript.Arguments(0)并将网址作为参数传递。使用cscript.exe将其放入任务计划程序。

这就是我执行所有基于ASP的计划任务的方式,因此我可以更轻松地测试,您可能希望将脚本锁定为仅通过服务器的IP接受访问,以确保它不被机器人调用。

编辑:为清楚起见。