用wmi實現iis智能重啟
2024-04-25 20:16:56
供稿:網友
公司的web服務器老是由于dllhost.exe 的內存無法釋放而當掉自己,導致asp頁面不能正常訪問,最可氣的是這種情況每每發生在我休假的時候,不得已被拉回來重啟一下iis,為了使自己的五一長假能安穩些,寫了個iis的自動重啟程序,我見網上類似的程序,都是定時重啟,我理想的狀況是不要過于頻繁啟動,只在dllhost.exe這個進程當掉的時候,再重啟,于是有了下面這段代碼,原理是監視應用程序日志,當出現事件id是5的錯誤時(無法為asp程序提供足夠內存),重啟iis,呵呵。
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 & "ootcimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("Select * from __instancecreationevent where TargetInstance isa'Win32_NTLogEvent' and TargetInstance.EventCode = '4' ")
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
'------核心程序,呵呵,短吧,wmi萬歲
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 "
iisreset Report
" & vbCrLf
end if
MyFile.WriteLine ""
MyFile.WriteLine " "
MyFile.WriteLine _
" iis重啟時間: " &now& " "
MyFile.WriteLine " 是否成功: 是 "
MyFile.WriteLine "
"
MyFile.WriteLine " "
MyFile.Close
set fso=nothing
Loop
'-----用fso記錄iis 重啟日志。