1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

IIS监控--自动重启脚本工具

本帖由 Function2006-03-30 发布。版面名称:主机讨论

  1. Function

    Function New Member

    注册:
    2006-03-24
    帖子:
    3,884
    赞:
    5
    功能:可以在IIS意外终止时自动重启IIS,无须登陆系统,无人职守
    条件:
    1.服务器安装过Windows Script 5.6,可以正常运行.vbs脚本。
    2.确保系统服务Windows Management Instrumentation 正常启动。

    将以下代码复制为 fu.vbs,放至系统盘WINNT/System32/下,注意重命名时要和“cscript //h:cscript&&cscript fu.vbs” 中的fu.vbs保持一至,否则计划任务启动时报找不到文件的错误。
    然后做计划任务,让其在系统启动时运行监控
    vbs代码:
    代码:
    strFullName = WScript.FullName
    strWshHost = Right(strFullName, 11)
    'WScript.Echo "Default script host: " & strWshHost
    If strWshHost = "WScript.exe" Then
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run _
    "%comspec% /k ""cscript //h:cscript&&cscript fu.vbs""", _
    MAXIMIZE_WINDOW
    If Err.Number <> 0 Then
    WScript.Echo "Error 0x" & hex(Err.Number) & " occurred. " & _
    Err.Description & ". " & VbCrLf & _
    "Could not temporarily change the default script host to Cscript."
    Err.Clear
    WScript.Quit
    End If
    WScript.Quit
    End If
    '- ---上面这段代码是强制到cscript命令行,一般要在cmd命令行下输入cscript *.vbs,如果直接执行vbs会用wscript打开,这样只会弹个对话框,我不喜欢,有不想每次都cscript,所以要写点额外的代码,双击后会调用一个wscript执行csript,然后再消灭自己,幸好微软的网站上提供了这个代码------------------------------ ------
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel= impersonate, (Security)}!\\" & strComputer & "\root\cimv2")
    Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
    ("Select * from __instancecreationevent where TargetInstance isa'Win32_NTLogEvent' and TargetInstance.EventCode = '7031' ")
    Wscript.Echo "开始监视iis于 "&now
    Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
    Wscript.Echo "重新启动iis "&now
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run "%COMSPEC% /c IISRESET.EXE",,1
    '------核心程序
    
    whichfile=("iisresetlog.htm")
    set fso=createobject("Scripting.FileSystemObject")
    if Not fso.FileExists(whichfile) then
    iomode=2 : create=true
    'Set MyFile = fso.CreateTextFile(whichfile,True)
    else
    iomode=8 : create=false
    'Set MyFile = fso.CreateTextFile(whichfile)
    end if
    set MyFile = fso.OpenTextFile(whichfile,iomode,create)
    'MyFile.writeLine("事件发生于 "&now&" 重启iis成功"&vbctrf)
    if create=true then
    MyFile.WriteLine ""
    MyFile.WriteLine ""
    MyFile.WriteLine ""
    MyFile.WriteLine ""
    MyFile.WriteLine ""
    MyFile.WriteLine ""
    end if
    MyFile.WriteLine " iis重启时间: <font color=red>" &now& "</font>"
    'MyFile.WriteLine " 是否成功: 是 <>"
    MyFile.WriteLine "<br>"
    MyFile.WriteLine " "
    MyFile.Close
    set fso=nothing
    Loop
    '-----用fso记录iis 重启日志。
    注意:TargetInstance.EventCode = '7031' 这段代码控制了在什么情况下重启IIS,7031是系统的事件 ID代号,即当系统日志出现7031这样的事件时重启IIS。
    下面是系统7031事件描述:IIS Admin Service 服务意外地终止,这种情况已经出现了 1 次。以下的修正操作将在 1 毫秒内运行: 运行配置的故障恢复程序。
    同样的道理,可以根据不同的事件ID触发此脚本,修改objShell.Run "%COMSPEC% /c IISRESET.EXE",,1 这一行代码,可以执行任何win32所支持的程序,即可以根据任意事件触发执行任意的程序,那样用途更广了。

    另:
    %comspec%打开一个命令行窗口。%comspec% 是一个指向当前命令行外壳的环境变量。通过使用 %comspec%,您不必担心命令行外壳是 cmd.exe 还是 command.exe;%comspec% 会自动选择正确的一个。

    /k 在调用 Dir 命令后,确保窗口始终保持打开。这就是 /k 参数的用处。如果我们想要确保命令窗口会在 Dir 命令调用完成后被自动关闭,应该将 /k (keep) 修改为 /c (close)。

    REFERER: http://siyizhu.com/weblog/default.asp?id=653 (siyizhu)
     
  2. shu_yu

    shu_yu New Member

    注册:
    2006-03-19
    帖子:
    355
    赞:
    0
    收了 帮顶