Computer Hostüberwachung mit bash und ping Hauptseite

Hostüberwachung mit bash und ping

Einleitung

Ob ein Rechner online ist, kann man in vielen Fällen leicht per Ping checken. Will man jedoch im Nachhinein herausbekommen, wann der Host vom Netz getrennt war und wie lange diese Trennung dauerte, braucht man eine Automatisierung. Mit einem kleinen bash-Skript kann man in regelmäßigen Abständen einen Host anpingen und bei einem Wechsel des Onlinestatus einen Logeintrag vornehmen.

Das Ganze ist natürlich nur eine Quick'n'dirty-Lösung. Die Tatsache dass ein Server per Ping erreichbar ist, sagt nichts über die Verfügbarkeit seiner Dienste aus. Und außerdem bietet gar nicht jeder Ping an. Handelt es sich dann vielleicht noch um mehrere Maschinen, sollte man eine Lösung wie Nagios in Betracht ziehen.
Wer aber bloss mal kucken will, ob ein Host in seinem LAN auch brav weiterwerkelt (oder ob die Putzfrau immer zum Saugen den Stecker zieht), dem dürfte das hier reichen.

Skript

#!/bin/bash
# check and log if a host is reachable by ping

#CONFIGURATION

#IP of host
WATCH_IP="192.168.0.99"
#path to logfile
LOGFILE="/var/log/watchip.log"
#duration between pings
PAUSE=3
#how many failed pings before log
TESTS=2

#SCRIPT

#initialize
MISSED=0
touch $LOGFILE

while true; do
  if ! ping -c 1 -w 1 $WATCH_IP > /dev/null; then
    ((MISSED++))
  else
    if [ $MISSED -ge $TESTS ]; then
      echo `date` '-' $WATCH_IP "is up again." >> $LOGFILE;
    fi
    MISSED=0
  fi;
  if [ $MISSED -eq $TESTS ]; then
    echo `date` "-" $WATCH_IP "is down." >> $LOGFILE;
  fi
  sleep $PAUSE;
done

Beschreibung

Im CONFIGURATION-Abschnitt werden vier Variablen definiert, die das Verhalten des Skripts steuern. $WATCH_IP enthält die IP-Adresse des zu überwachenden Hosts, $LOGFILE den Pfad zur Logdatei, $PAUSE die Wartezeit (in Sekunden) zwischen jedem Pingversuch und $TESTS die Anzahl fehlgeschlagener Pings nach der eine Meldung ins Log geschrieben wird.

Das Skript schickt pro Durchlauf immer nur einen Ping (-c 1) auf die Reise und wartet eine Sekunde (-w 1) auf die zugehörige Antwort. Bleibt diese aus, erhöht sich $MISSED um eins, war er hingegen erfolgreich wird $MISSED wieder auf 0 gesetzt. Wenn die Schwelle $TESTS erreicht wird, fügt das Skript eine Zeile mit Zeitstempel und Host-down-Info an die Logdatei an. Ist der Rechner dann wieder per Ping erreichbar, wird in die Logdatei eine ähnliche Host-up-Meldung geschrieben.

Letzte Änderung am 09.12.2007