Logo faq-o-matic.net
Logo faq-o-matic.net

Monitoring: Ping-Checks zeitabhängig

von veröffentlicht am7. Mai 2012, 06:05 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Batch, Downloads, Monitoring   Translate with Google Translate Translate EN   Die angezeigte Seite drucken

Eine simple Form des Monitoring prüft per Ping, ob ein bestimmter Rechner im Netz erreichbar ist. Das ist zwar nicht so richtig aussagekräftig, aber als Basis für eine Beurteilung oft schon hilfreich.

Problematisch ist dabei manchmal, dass manche Systeme bekanntermaßen zu bestimmten Zeiten gar nicht antworten. Beliebte Falle sind da etwa Netzwerkdrucker, die abends in einen Energiesparmodus wechseln und dann nicht auf Echo-Anforderungen reagieren. Mit Hilfe von etwas Batch-Magie kann man die Fehlalarme in solchen Situationen deutlich reduzieren. Die gezeigte Technik kann man natürlich auch für andere Zwecke nutzen als nur Ping-Checks.

Wie die meisten Monitoring-Skripte geben auch diese den Errorcode 0 zurück, wenn alles okay ist (also wenn die Rechner auf Ping antworten) und den Wert 1 bei einem Fehler (Ausbleiben der Antwort). Ganz unten gibt es die Skripte zum Download.

Skript 1: Zeitabhängig pingen

Die erste Variante des Skripts erlaubt die Definition von Uhrzeiten, in denen der Check ausgeführt wird. Vorsicht dabei, da ich mich hier rein auf Batch-Mittel beschränke, ist der Code sprachabhängig. Man sollte also immer erst lokal auf dem System testen, von dem der Ping später ausgehen soll, und ggf. die regionalen Ausgaben anpassen.

Dieses Skript kann die wichtigen Parameter auch über die Kommandozeile entgegennehmen. Übergibt man dort nichts, verwendet es die Vorgaben aus dem Code. Beispiel:

  • Ping-InTimeRange 10 18 10.10.10.101
    Pingt zwischen 10:00 Uhr und 18:59 Uhr den Rechner mit der IP-Adresse 10.10.10.101 an
@echo off
rem Ping-InTimeRange.bat
rem Script to ping an address only in a specified time range
rem By Nils Kaczenski, faq-o-matic.net
rem Version 1.0, 2012-02-29

rem Specify default values (may be altered by command line)
rem Begin is the first hour of the range (included)
rem End is the last hour of the range (included)
rem PingAddress may be an IP address or a host name (if name resolution works)
rem Example: 10 to 14 means begin at 10:00:00 and end at 14:59:59
rem *** Modify here if needed ***
SET Begin=10
SET End=18
SET PingAddress=127.0.0.1
rem *** End modify

rem Use command line values if provided
IF NOT "%1"=="" SET Begin=%1
IF NOT "%2"=="" SET End=%2
IF NOT "%3"=="" SET PingAddress=%3

rem Uncomment this to display the settings
rem ECHO Ping %PingAddress% between %Begin% and %End%

rem Split time into tokens
for /f "tokens=1-4 delims=.:, " %%i in ("%time%") do (
 set hour=%%i
 set minute=%%j
 set second=%%k
 set hundredth=%%l
)

rem Initialize check variable
rem Check=1 means time is out of range, 0 means within range
SET Check=1

rem Check current time against Begin and End
IF %hour% GEQ %Begin% (
	IF %hour% LEQ %End% SET Check=0
	)
	
IF %Check%==1 (
	ECHO Current time %time% is out of range %Begin% to %End%. Will not ping.
	EXIT /B 0
	) ELSE (
	ping -n 1 %PingAddress%>nul
	)

Skript 2: Tages- und zeitabhängig pingen

Das zweite Skript geht noch einen Schritt weiter. Es führt die Prüfung nur zu den angegebenen Zeiten aus und erlaubt zusätzlich die Angabe von Wochentagen, an denen es nicht prüfen soll. Das ist z.B. nützlich, wenn die Zielsysteme am Wochenende abgeschaltet sind.

Auch hier sind ggf. Anpassungen wegen der Sprachversion des prüfenden Rechners nötig. Anders als das erste Skript nimmt diese Fassung keine Angaben über die Kommandozeile entgegen. Dafür kann man gleich mehrere Prüfungen hineinpacken, indem man gegen Ende des Codes die angegebenen Zeilen kopiert und anpasst. Jede Prüfung besteht hier aus zwei Zeilen (“ping” und Auswertung der Antwort mit “if errorlevel 1”).

@echo off
rem Ping-InTimeAndDateRange.bat
rem Pings a number of IP addresses only at specified times
rem Version 1.1 EN, 2012-03-07

rem Specify default values (may be altered by command line)
rem Begin is the first hour of the range (included)
rem End is the last hour of the range (included)
rem Example: 10 to 14 means begin at 10:00:00 and end at 14:59:59
rem *** Modify here if needed ***
SET Begin=7
SET End=18
rem *** End modify

rem Split time into tokens
for /f "tokens=1-4 delims=.:, " %%i in ("%time%") do (
 set hour=%%i
 set minute=%%j
 set second=%%k
 set hundredth=%%l
)

rem Get day of week
rem see http://www.administrator.de/index.php?content=80546
rem *** Modify here if needed ***
rem *** English version - for German systems use "delims=." and "mm=%%b" and "dd=%%a"
FOR /F "tokens=1,2,3 delims=-" %%a in ('echo %date%') do set yy=%%c & set mm=%%a & set dd=%%b
rem *** End modify set /a "TwoDigitYearMax=2038%%1000" if 1%yy% LSS 200 if 1%yy% LSS 1%TwoDigitYearMax% (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100 set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2 set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1 rem *** Modify here if needed *** rem *** set day names according to the system language If %dow% equ 1 set "WoTa=Montag" If %dow% equ 2 set "WoTa=Dienstag" If %dow% equ 3 set "WoTa=Mittwoch" If %dow% equ 4 set "WoTa=Donnerstag" If %dow% equ 5 set "WoTa=Freitag" If %dow% equ 6 set "WoTa=Samstag" If %dow% equ 7 set "WoTa=Sonntag" rem *** End modify rem Initialize check variable rem Check=1 means time is out of range, 0 means within range SET Check=1 rem Check current time against Begin and End IF %hour% GEQ %Begin% ( IF %hour% LEQ %End% SET Check=0 ) rem Check day of week rem *** Modify here if needed *** rem *** set day names according to the system language rem *** set Check=1 to NOT perform the tests on given days IF %WoTa%==Samstag SET Check=1 IF %WoTa%==Sonntag SET Check=1 rem *** End modify rem Initialize error variable SET PingError=0 rem Do the actual ping checks IF %Check%==1 ( ECHO Time %time% on %WoTa% is not between %Begin% and %End%. No tests to do. EXIT /B 0 ) ELSE ( rem *** Modify here if needed *** rem *** copy and modify the lines as needed ping -n 1 10.10.10.101>nul IF ERRORLEVEL 1 (SET PingError=1 & ECHO No reply from SYSTEM NAME!) ping -n 10.10.10.102>nul IF ERRORLEVEL 1 (SET PingError=1 & ECHO No reply from SYSTEM NAME!) rem *** End modify ) IF %PingError%==1 ( ECHO No reply from at least one system. EXIT /B 1 ) ELSE ( ECHO All systems replied correctly. EXIT /B 0 )

Und hier der Download:

Download: Ping-InTimeAndDateRange  Ping-InTimeAndDateRange (1,3 KiB, 1.541-mal heruntergeladen, letzte Änderung am 2. April 2012)

Download: Ping-InTimeRange  Ping-InTimeRange (841 bytes, 1.452-mal heruntergeladen, letzte Änderung am 2. April 2012)

© 2005-2023 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!