希望在我的IIS服务器上设置某种cron等效项

Looking to set up some kind of cron-equivalent on my IIS server

提问人:Andrew G. Johnson 提问时间:1/21/2010 更新时间:1/21/2010 访问量:1587

问:

我目前正在为我的公司设置一个系统,该系统使用依赖于来自第三方 API 的数据的 IIS 设置上的经典 ASP。问题是 API 响应速度极慢,它发送的只是一个大型 XML 文件或所有数据。足够简单的解决方法是每天请求一次,并设置一个数据库来存储此信息,并让应用程序使用数据库作为源而不是 API。

我在 ASP 文件中编写了数据库填充代码,只需要确保它每天都能运行。最好的方法是什么?我不太熟悉这里的最佳实践,我应该只是让计划任务打开 iexplorer 指向运行爬虫的 URL,还是有某种方法可以通过命令行做到这一点。最担心的是,我正在尝试将如何在 LAMP 上的 PHP 中执行此操作转换为 ASP/WISA,而不是将其视为自己的问题。

IIS cron

评论


答:

1赞 Paddy 1/21/2010 #1

您可能希望创建一个在后台运行的 Windows 服务 - 仅使用 ASP 页面很难做到这一点。

评论

0赞 alumb 1/21/2010
这将要求您自己实现调度代码。搞砸它并有一个繁忙的循环而不是一个空闲的循环并吃掉 CPU 是非常容易的。
2赞 alumb 1/21/2010 #2

在 Windows 计算机上,等效于 cron 是“计划任务”。Windows XP 的操作方法位于此处:http://support.microsoft.com/kb/308569。在大多数版本的 Windows 上都可以执行类似的步骤。

如果将数据筛选代码放在 asp 文件中,则可以使用以下 VBS 脚本向该文件发出 http 请求:

Const WinHttpVersion = "5.1"
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.
strURL = WScript.Arguments(0)

' For more WinHTTP v5.0 info, go to Registry Editor to find out 
' the version of WinHttpRequest object.
Set objWinHttp = CreateObject("WinHttp.WinHttpRequest." & WinHttpVersion)

If IsObject(objWinHttp) Then
    objWinHttp.Open "GET", strURL
    objWinHttp.Send
    If objWinHttp.Status <> 200 Then
        Err.Raise 1, "HttpRequester", objWinHttp.ResponseText
    End If
    Set objWinHttp = Nothing
End If

If Err.Number <> 0 Then
    ' Something has gone wrong... do something about it...
End If

对此的调用如下所示:

HttpRequester.vbs http://localhost/MyApp/loadData.asp

评论

0赞 Andrew G. Johnson 1/21/2010
我想在我们的服务器上设置它,我想这很容易成为“运行日常实用程序”应用程序中的第一个 - 任何知道如果我继续沿着这条路走下去会变得多么毛茸茸的
0赞 alumb 1/21/2010
@Andrew我会为您正在构建的每个应用程序生成一个批处理文件,但这应该不会很糟糕。我们有大约 15 个计划任务在我们的一台 Windows 服务器上运行,没有任何问题。
0赞 Joel Etherton 1/21/2010
@Andrew - 这种脚本最终会失控。我在我管理的服务器上发生了这种情况。我最终构建了一个 .Net WinForms 应用程序,该应用程序为每个单独的进程提供了一个窗口和一个后台管理器,允许在没有从命令行交互的情况下调用程序(这样人类可以运行它并进行交互,或者可以从调度程序调用它并完成其工作)。
2赞 Joel Etherton 1/21/2010 #3

我建议不要使用脚本调用来实现此目的。最好使用从任务计划程序调用的 .Net 控制台应用程序来完成此操作。

评论

0赞 alumb 1/21/2010
是的。这是一个很好的建议。如果您熟悉 .Net 控制台应用程序,这将比我提供的脚本更好。
0赞 D'Arcy Rittich 1/21/2010 #4

按计划的时间间隔调用 ASP 页是微不足道的。只需使用 wgetcurl 的 Windows 端口(如果需要,您可以使用 IE)并设置计划任务以按您想要的时间间隔加载页面。

这不需要编写脚本,只需将可执行路径作为要运行的进程,并将 URL 放在参数字段中(加上一些其他开关,具体取决于您最终使用的程序)。