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:
Ping-InTimeAndDateRange (1,3 KiB, 1.758-mal heruntergeladen, letzte Änderung am 2. April 2012)
Ping-InTimeRange (841 bytes, 1.661-mal heruntergeladen, letzte Änderung am 2. April 2012)
http://faq-o-matic.net/?p=3946



Kategorie:
Translate EN