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.

Written by rony