ASP中实现执行定时任务的方法
一个很常见的 asp 问题 : “如何定时工作流程执行网页?”, 之所以会问这个问题大部分是因为管理员可能会利用一个 asp 网页来作数据库维护的动作, 如备份, 在 windows nt 平台有一个方法可以做工作流程, 那就是 at 指令 + schedule 服务,就是计划任务, 但很可惜的是你并没有法度在命令列 (command-line) 执行 asp 网页 。
当然你可以在命令列执行 ie 并告诉它要求执行的网页, 例如:
c:\program files\internet explorer\iexplore.exe http://localhost/mypage.asp,
不过, 这绝对不是大部分的网站管理者所要的方法, 因为这必须要开启浏览器, 花费许多的系统资源, 此外, 还有一个缺点, 那就是执行 asp 网页有逾时时间 (timeout), 如果你要执行许多的流程工作, 你可能要更改 timeout 时间, 太麻烦了,直接忽视。
在这一篇文章要介绍的是使用 wsh (windows scripting host) 的解决方案。
假设你现在有一个广告轮拨系统, 你想将检查广告到期日这件工作自动化每天凌晨执行, 也就是当一则广告过期了, 便将其广告状态更改为停用, 我们先来看看资料表 adinfo 字段 。
adid 广告代码 int
adname 广告名称 varchar(64)
validtodate 广告到期日 datetime
adstatus 广告状态 int (0为停用, 1为进行)
接下来看看如何用 wsh, 基本上和 asp 的写法是一样的除了不需加上 asp 分隔符,不能使用server.,存盘的扩展名为 .vbs 。
由于不是使用 asp.dll , 因此没有 asp 的对象模式并不适用,所以这样写server.createobject会报错。
利用 wsh 作定时工作流程 :
'请勿用 server.createobject
set oconn = createobject("adodb.connection")
oconn.open yourconnstring
ssql = "update adinfo set adstatus=0 " _
& "where validtodate< ='" & date & "'"
oconn.execute(ssql)
oconn.close
set oconn = nothing
存为 c:\scripts\updateadstatus.vbs,
wsh 有两个版本, 一为窗口版 (wscript.exe), 一为命令列版 (cscript.exe),。
在这个例子我们将使用 (cscript.exe), 你可以在 dos 命令列下执行 :
c:\>cscript c:\scripts\updateadstatus.vbs
接着你可以到数据库下查询资料是否更新, 在实际的应用上, 建议你使用批此档来区分不同时段的工作, 好比说我会创造一支名为 dailytask.bat 的批次档来执行所有的每日例行工作, 如此一来, 我只需将所有每日应执行的 script 放到这支批次档即可, 然后利用 at command 或是 sql server agent 定时每日执行 dailytask.bat 。
强烈建议使用 sql server agent, 这会比使用 at command 来得有效率且稳定!
设定 sql server agent 你可以执行 enterprise manager, 展开后会看到这样的画面。
鼠标右点 jobs, 选择 new job 。
选择 step 按 new 。
指定 step name , type 请选择 operating system command, 并设定执行的 command 。
选择 schedule 设定你的流程。
下面是数据库的截图:
上一篇: ASP获取新增记录ID值的方法