Bash-Skript - einfaches Multi-Ping-Monitoring in Fast-Echtzeit
Ich brauchte da auf die Schnelle mal was: ich wollte mehrere Systeme mit Ping antesten, ob sie im Netz sind.
Die Liste der zu testenden Systeme sollte untereinander stehen und pro System angeben; ich bin erreichbar … oder auch nicht.
Ja natürlich haben wir ein System-Monitoring, aber das ist etwas träge - ich wollte das Ganze alle wenige Sekunden aktualisieren. Im Rack wollte ich Kabel ziehen und umstecken - und nebenher sehen, welches Gerät offline geht und wieder da ist.
Hier mein Bash-Skript:
#!/bin/bash cfgfile="$0.cfg" while true; do clear echo ">>>>> PING TEST :: $( date )" echo cat "$cfgfile" | grep "^[a-z1-9]" | while read -r target do printf "%-35s > " $target if ! ping -c1 $target 2>&1 | grep "transmitted"; then echo "FAILED" fi done sleep 1 done
Im Endlos-Loop wird der Bildschirm gelöscht, ein Header mit Datum ausgegeben. Ich lese eine Datei aus, die meine Liste von Geräten enthält.
Ein Gerät wird einmalig angepingt (Parameter -c 1) - genau das geht sehr schnell. Es wird ausgegeben, ob es erreichbar war oder nicht.
Nach Abarbeiten der Liste folgt ein sleep 1 - und nach dieser nur kurzen Wartezeit geht es von vorn los.
Die Configdatei mit der Liste der Server - je einer pro Zeile - Leerzeilen, Kommentare u.ä werden ignoriert:
# # my server list # server-01.example.com server-02.example.com server-03.example.com server-04.example.com server-05.example.com
Das Ganze sieht in der Ausgabe am Terminal grob aus:
>>>>> PING TEST :: Mi 10 Mai 2023 16:37:41 CEST server-01.example.com > 1 packets transmitted, 1 received, 0% packet loss, time 0ms server-02.example.com > 1 packets transmitted, 1 received, 0% packet loss, time 0ms server-03.example.com > 1 packets transmitted, 1 received, 0% packet loss, time 0ms server-04.example.com > 1 packets transmitted, 1 received, 0% packet loss, time 0ms server-05.example.com > FAILED
Kommentar hinzufügen
Die Felder Name und Kommentar sind Pflichtfelder.