Windows에서 여러 서비스를 실행하는 일부 타사 소프트웨어를 모니터링해야 합니다. 서비스가 다시 시작되거나 실패하는 경우 이메일을 받도록 설정하고 싶습니다.
이것은 쉽게 스크립트로 작성할 수 있는 것입니까? 누군가 이 작업에 대한 기본적인 것을 가지고 있습니까?
답변1
이것은 약간 보기 흉하지만 필요에 맞게 수정할 수 있습니다. 스크립트를 자주 호출하도록 예약된 작업을 설정하기만 하면 됩니다.
Dim ServiceDown
Dim Message
Function sGetServiceStatus(ByVal strServiceName)
wbemImpersonationLevelImpersonate = 3
wbemAuthenticationLevelPktPrivacy = 6
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer("localhost")
objWMIService.Security_.ImpersonationLevel = wbemImpersonationLevelImpersonate
objWMIService.Security_.AuthenticationLevel = wbemAuthenticationLevelPktPrivacy
Set colListOfServices = objWMIService.ExecQuery("Select * from Win32_Service Where DisplayName ='"& strServiceName & "'")
if(colListOfServices.Count=0) then
sGetServiceStatus = ""
Exit function
end if
For Each objItem in colListOfServices
If objItem.DisplayName = strServiceName and objItem.State = "Running" Then
sGetServiceStatus = objItem.State
Exit Function
else
sGetServiceStatus = objItem.State
ServiceDown = True
Message = Message & vbcrlf & strServiceName
Exit function
End If
Next
sGetServiceStatus = ""
End Function
sGetServiceStatus("ISC BIND")
sGetServiceStatus("Apache2.2")
sGetServiceStatus("MySQL")
If ServiceDown Then
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Check Services"
objMessage.From = "[email protected]"
objMessage.To = "[email protected]"
objMessage.TextBody = "The following service(s) is/are down: " & Message
objMessage.Send
End If