Kontrola spadnutých Application Pool v IIS
Príliš často sa stretávam s tým, že v IIS z nejakých dôvodov často padajú Application Pool. Keďže som nenašiel príčinu a som zvyknutý, že Apache na Linuxe nepotrebuje každodenný sitting, tak som hľadal aspoň niečo.
Chcel som teda skript, ktorý vie:
* naštartovať, zastaviť alebo reštartovať Application Pool – našiel som,
* skontrolovať, či Application Pool stojí, beží – našiel som.
Pokiaľ Vám AP príliš často padá a nechcete sa zaťažovať, tak jednoduchý skript obehne AP a naštartuje ich:
dim objAppPools, objAppPool
Set objAppPools = GetObject("IIS://localhost/W3SVC/AppPools")
for each objAppPool in objAppPools
Set objAppPool = GetObject("IIS://localhost/W3SVC/AppPools/"+objAppPool.Name)
objAppPool.Start()
next
Kód si v Notepade uložím ako súbor apstart.vbs a tento skript dám do Scheduled Tasks. Nastavte si aký interval chcete. Prípadný výpadok teda bude trvať maximálne dĺžku tohto intervalu. Dať si to každú minútu je podľa mňa rovnako hlúpe ako nastaviť to na 1x mesačne :-)
Tým by to mohlo skončiť ale nebudete vedieť, či a kedy Vám AP padajú. Preto som hľadal ďalej ako zistím stav AP. Výsledkom je skript, ktorý zadané názvy AP obíde a zapíše do súbory (log) ak je nepojazdný. Vedie vám teda záznamy o detekovaných spadnutých AP.
Opäť treba skript naplánovať do Scheduled Tasks. A iste viete, že je to diskrétna kontrola (v zadanom okamihu).
sub skontroluj(strArgAppPool)
Set oWMIService = GetObject("winmgmts:root\microsoftiisv2")
Set strQueryAppPools = oWMIService.ExecQuery("Select * from IIsApplicationPoolSetting where Name='W3SVC/AppPools/" & strArgAppPool & "'")
noError = False
For Each oAppPool in strQueryAppPools
noError = True
Select Case oAppPool.AppPoolState
Case 1
poolState = "Starting"
outputStatus = "WARNING: "
outputCode = 1
Case 2
poolState = "Running"
outputStatus = "OK: "
outputCode = 0
Case 3
poolState = "Stopping"
outputStatus = "WARNING: "
outputCode = 1
Case 4
poolState = "Stopped"
outputStatus = "CRITICAL: "
outputCode = 2
Case else
poolState = "unknown"
outputStatus = "UNKNOWN: "
outputCode = 3
End Select
poolName = Replace(oAppPool.Name, "W3SVC/AppPools/", "")
If Not outputStatus = "OK: " Then
Set objOutputFile = objFileSystem.OpenTextFile(strOutputFile, 8)
objOutputFile.WriteLine ( Date & " " & Time & " A1 " & outputStatus & poolName & ", State: " & poolState )
objOutputFile.Close
End If
Next
If Not noError Then
Wscript.echo "UNKNOWN: Error during the WMI query for app pool " & strArgAppPool & " !"
WScript.Quit(3)
End If
End Sub
Uvádzam len podprogram, ktorý robí konkrétnu kontrolu AP. Zabudujte si to do Vášho skriptu.
S pozdravom, milujeme IIS, ktoré vyžaduje toľko lásky a pozornosti.