Erstmal ein Hallo und der Hinweis, daß nachfolgendes Script mein erster Versuch mit AutoIt war. Der Tatsache geschuldet, daß Autohotkey mein Script
als Dienst nicht sauber ausführen wollte.
Die Beschreibung befindet sich im Script. Nur soweit, es ist kein Ersatz für ein Monitoringtool und als solches auch nicht gedacht. Es soll lediglich
ein Ergänzungstool für sehr sensible Server sein, falls Monitoringtools nicht die entsprechenden Möglichkeiten bieten, wie in meinem Beispiel NAGIOS.
Gruß Ritter
C
;
; AutoIt Version: 3.3.6
; Language: Deutsch
; Platform: Windows XP/ Win2003
; Author: Ritter207©2010
;
; Script Function: Verfügbarkeit von Servern prüfen
;
; Grund: Das eingesetzte Monitoring-System NAGIOS kann bestimmte Überprüfungen (z.B. gewünschte zeitliche
; Abläufe bis Auslösung einer Aktion oder auch den Zustand welcher überwiegend bei Terminalservern
; auftritt (Server ist beim Herunterfahren hängengeblieben, aber dennoch anpingbar) nicht umsetzen.
; Ein Script in Autohotkey funktionierte zwar, aber das compilierte Script als Dienst laufen zu
; lassen, konnte nicht sicher umgesetzt werden. Deshalb der erste Versuch in AutoIt3 !!!
; Und damit geht es so, wie ich es mir vorgestellt habe.
;
; Ziel: Prüfen von Servern auf Verfügbarkeit mit Versand von Mails aufgrund verschiedener Bedingungen
; und an verschiedene Mail_Adressen (z.B. zwecks einmaliger Ticketerstellung und weiterer
; Beobachtung), bis Server wieder verfügbar ist.
;
; Ablauf: Nach Start des Programms als .exe oder auch die .exe als Dienst und nach Ablauf der festgesetzten
; Timerzeit, wird jedes Mal wenn der Server nicht verfügbar ist, der Zähler um 1 erhöht und in die
; Datei Zaehler.txt geschrieben. Bei 3 wird der Wert für Mail auf 1 gesetzt und eine Mail (z.B. zur
; Ticketerstellung abgesetzt). Der Zählerstand wird dann wieder auf 0 gesetzt und die Prüfung weiter
; fortgesetzt. Nach jedem Durchlauf wird eine Info-Mail (Warning1) an eine bspw. andere Adresse
; gesendet. Bei Zählerstand 3 wird der Wert für Mail auf 2 erhöht und die Info-Mails werden mit Info
; (Warning2) gesendet. Sobald der Server irgendwann wieder verfügbar ist, werden die Werte für Zähler
; und Mail sofort auf 0 gesetzt. Es erfolgt kein Mailversand mehr.
;
; Was wird zusätzlich benötigt ?
;
; Da AutoIt Funktionen wie Ping() oder auch INetSmtpMailAuth() oder andere nicht die gewünschten Ergebnisse
; brachten, habe ich Alive.exe und Blat.exe eingesetzt. Sind beide Freeware und schnell in Google zu finden.
; Um das compilierte Script als Dienst laufen zu lassen, hat sich das Tool RunAsSvc.exe von Pirmasoft als
; sehr ideal erwiesen. Das Script wird damit als Dienst ins System eingebunden und der Dienst kann über
; die Systemsteuerung/Software sogar wieder deinstalliert werden. Ist auch Freeware.
; Weiterhin ist File.au3 mit einzubinden (#Include). Wird für _FileReadToArray benötigt.
;
; Pfad für alle benötigten Programme @ScriptDir
;
#include <File.au3>
Dim $aArray
If FileExists(@ScriptDir & "\Zaehler.txt") Then ; Falls vorhanden, wird Datei geleert
$File1 = FileOpen(@ScriptDir & "\Zaehler.txt", 2)
FileClose($File1)
EndIf
If FileExists(@ScriptDir & "\Mail.txt") Then ; Fall vorhanden, wird Datei geleert
$File2 = FileOpen(@ScriptDir & "\Mail.txt", 2)
FileClose($File2)
EndIf
$Timer = TimerInit()
While 1
If TimerDiff($Timer)>180000 Then ; Zeit für wiederholte Abfrage (Bsp. 3 min)
;Ab hier, was wiederholt ausgeführt werden soll
Dim $S
Dim $Z
Dim $M
Dim $P
Dim $R
Dim $Array1[100]
Dim $Array2[100]
Dim $Array3[100]
_FileReadToArray ( @ScriptDir & "\Server.txt", $Array1) ; Liste der Server
_FileReadToArray ( @ScriptDir & "\Zaehler.txt", $Array2)
_FileReadToArray ( @ScriptDir & "\Mail.txt", $Array3)
$File1 = FileOpen(@ScriptDir & "\Zaehler.txt", 2) ; Datei wird leer geöffnet
FileClose($File1)
$File2 = FileOpen(@ScriptDir & "\Mail.txt", 2) ; Datei wird leer geöffnet
FileClose($File2)
For $i = 1 to $Array1[0]
If $Array2[$i] = "" Then
$Array2[$i] = "0"
Endif
If $Array3[$i] = "" Then
$Array3[$i] = "0"
Endif
$S = $Array1[$i]
$Z = $Array2[$i]
$M = $Array3[$i]
Abfrage($S, $Z, $M)
If ($Z <= "2") and ($M = "0") Then
Write($Z, $M)
Endif
If ($Z <= "2") and ($M = "1") Then
$Info = "Warning1"
BlatMail_W($S, $P, $R, $Info)
Write($Z, $M)
Endif
If ($Z <= "2") and ($M = "2") Then
$Info = "Warning2"
BlatMail_W($S, $P, $R, $Info)
Write($Z, $M)
Endif
If ($Z = "3") and ($M = "1") Then
$Info = "Ticket"
BlatMail_T($S, $P, $R, $Info)
$Z = "0"
Write($Z, $M)
Endif
If ($Z = "3") and ($M = "2") Then
$Info = "Warning2"
BlatMail_W($S, $P, $R, $Info)
$Z = "0"
Write($Z, $M)
Endif
Next
; Bis hier, was wiederholt ausgeführt werden soll
$Timer = TimerInit()
EndIf
Sleep(100)
WEnd
Func Abfrage(ByRef $S, ByRef $Z, ByRef $M)
$pvar = Runwait(@ScriptDir & "\alive.exe" &" " &$S &" " & "/Repeat=3" &" " & "/Timeout=1", "", @SW_HIDE ) ; Werte für Repeat und Timeout anpassbar
If $pvar Then
$P = "NoPing"
$R = "unerreichbar!!!"
$Z = $Z + 1
If ($M = "1") and ($Z = "3") Then $M = "2"
If ($M = "0") and ($Z = "3") Then $M = "1"
If ($M = "") Then $M = 0
Else
$P = "PingOK"
$rvar = RegRead("\\$S\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon", "WinStationsDisabled") ; Andere Schlüsselabfrage natürlich möglich
If $rvar Then
$R = "unerreichbar!!!" ; Dieser Zustand kann z.B. durch Nagios nicht abgefangen werden
$Z = $Z + 1
If ($M = "1") and ($Z = "3") Then $M = "2"
If ($M = "0") and ($Z = "3") Then $M = "1"
Else
$R = "verfügbar!!!"
$Z = "0"
$M = "0"
Endif
Endif
Return
EndFunc
Func Write(ByRef $Z, ByRef $M)
$File1 = FileOpen(@ScriptDir & "\Zaehler.txt", 1)
FileWrite($File1, $Z & @CRLF)
FileClose($File1)
$File2 = FileOpen(@ScriptDir & "\Mail.txt", 1)
FileWrite($File2, $M & @CRLF)
FileClose($File2)
Return
EndFunc
Func BlatMail_T(ByRef $S, ByRef $P, ByRef $R, ByRef $Info) ; Mailversand zur Ticketauslösung z.B.
$SmtpServer = "-server SMTP-SERVER" ; SMTP-SERVER eintragen
$FromName = "SERVER." ; SERVER der Script ausführt eintragen, Blat schreibt diesen in Registry
$FromAddress = "SERVERDOWN@xxx.net" ; Adresse anpassen, Blat schreibt Adresse in Registry
$ToAddress = "-to Adresse1@domain.de" ; Adresse zur Ticketauslösung z.B.
$Sub = "-subject "
$Body = "C:\Alarm\dummy.txt" ; Leere Datei (erforderlich für Blat) -->>> Kann auch mit Text gefüllt werden
$Log = "-log blatSMTPlog.txt" ; Hilfreich falls Fehler auftreten
$Subject = StringFormat('%s "%s %s %s %s"', $Sub, $S, $P, $R, $Info)
Run("Blat.exe" &" " &"-install" &" " &$FromName &" " &$FromAddress, "", @SW_HIDE)
RunWait("Blat.exe" &" " &$Body &" " &$ToAddress &" " &$SmtpServer &" " &$Subject &" " &$Log, "", @SW_HIDE)
Return
EndFunc
Func BlatMail_W(ByRef $S, ByRef $P, ByRef $R, ByRef $Info) ; Mailversand für Infos nach Ticketauslösung z.B.
$SmtpServer = "-server SMTP-SERVER" ; SMTP-SERVER eintragen
$FromName = "SERVER." ; SERVER der Script ausführt eintragen, Blat schreibt diesen in Registry
$FromAddress = "SERVERDOWN@xxx.net" ; Adresse anpassen, Blat schreibt Adresse in Registry
$ToAddress = "-to Adresse2@domain.de" ; Adresse für weitere Infos
$Sub = "-subject "
$Body = "C:\Alarm\dummy.txt" ; Leere Datei (erforderlich für Blat) -->>> Kann auch mit Text gefüllt werden
$Log = "-log blatSMTPlog.txt" ; Hilfreich falls Fehler auftreten
$Subject = StringFormat('%s "%s %s %s %s"', $Sub, $S, $P, $R, $Info)
Run("Blat.exe" &" " &"-install" &" " &$FromName &" " &$FromAddress, "", @SW_HIDE)
RunWait("Blat.exe" &" " &$Body &" " &$ToAddress &" " &$SmtpServer &" " &$Subject &" " &$Log, "", @SW_HIDE)
Return
EndFunc
Alles anzeigen