Skip to content

Internetverbindung prüfen

Seit etwas mehr als einer Woche spinnt mein Router und startet regelmäßig neu. Der Neustart löscht dabei das komplette Logfile, es sieht eher wie ein Stromausfall oder Wackelkontakt am Netzteil aus. Um ein Gefühl dafür zu bekommen und an den Kundenservice zu melden, wie oft das passiert, habe ich mir ein kleines Skript geschrieben.

Es gibt sicher auch fertige Skripte dafür, aber selbst schreiben macht ja immer mehr Spaß. ;)

#!/bin/sh

FAIL=0
FAILCOUNT=0
FAILDATE=""
FAILLOG=""
while [ 1 ]
do
    LOGDATE=`date +"%y%m%d"`
    RESULT=`ping -c1 -W1 -q 8.8.8.8`
    if [ $? -eq 1 -o "x$RESULT" = "x" ]
    then
        if [ $FAIL -eq 0 ]
        then
            # Erst beim zweiten Test (nach 10 Sekunden) eine Meldung ausgeben.
            if [ $FAILCOUNT -gt 0 ]
            then
                FAIL=1
                FAILLOG="$HOME/connection_$LOGDATE.log"
                echo "$FAILDATE Internet connection is down" >> "$FAILLOG"
            fi
        fi
        if [ $FAILCOUNT -eq 0 ]
        then
            FAILDATE=`date`
        fi
        FAILCOUNT=$((FAILCOUNT + 1))
    else
        if [ $FAIL -eq 1 ]
        then
            SECONDS=$((FAILCOUNT * 10))
            echo "`date` Internet connection is up again (lost for $SECONDS secs)" >> "$FAILLOG"
        fi
        FAIL=0
        FAILCOUNT=0
        FAILDATE=""
        FAILLOG=""
    fi
    sleep 10
done

Was das Skript effektiv macht, ist es alle 10 Sekunden den Server 8.8.8.8 (Google-DNS-Server) einmal anzupingen. Ich wollte erst den Router anpingen (der ja auch nicht erreichbar ist, wenn er neustartet), aber zum einen ist er eher erreichbar als die Internetverbindung aufgebaut ist und zum anderen gab es ein Problem, dass die Neueinwahl nicht mehr klappte, der Router aber erreichbar war.

Als Rückgabe des Pings gibt es normalerweise eine 0 für Erfolg (Paket kam an) oder eine 1 für Misserfolg (Paket verloren). Eine Besonderheit ist es, wenn man das Netzkabel zieht. Dann liefert ping zwar eine 0, aber mit der Ausgabe „connect: Network is unreachable“. Das fange ich durch die Abfrage des RESULT mit ab.

Wenn der Ping schief geht, zähle ich erst einmal nur FAILCOUNT hoch und speichere mir das Datum das ersten Fehlschlags für später. Ich gebe nicht sofort eine Fehlermeldung im Log aus, weil meine Internetverbindung immer mal Kurzabbrüche für wenige Sekunden hat, die den Ablauf nicht stören. Daher gebe ich erst eine Logmeldung aus, wenn FAILCOUNT größer als 0 ist, d.h. mindestens seit 10 Sekunden weg.

Im Namen der Logdatei speichere ich das Datum mit ein. Grund ist, dass ich die Wiedererreichbarkeit auf alle Fälle immer in dem Logfile sehen will, wo auch der Verbindungsabbruch steht, selbst wenn es am nächsten Tag ist (d.h. über Mitternacht hinweg).

Im Gutfall, d.h. der Ping kam an, berechne ich die Sekunden, wie lange der Ausfall war und schreibe dies in die Logdatei.

Das Skript läuft bei mir dann im Hintergrund mit und kostet kaum Ressourcen.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Gast am :

Dankr dir - ich habe momentan auch öfters unerklärliche Abbrüche bei meiner FrotzBox 7170.

Sergej am :

Einfach einen neuen Router kaufen und die Sache ist mit 30 Euro erledigt :)

Für den Script aber trotzdem Danke, das könnte man für andere Aufgaben anpassen.

Steffen am :

Danke für das script, es scheint super zu funktionieren und ist eine echte Hilfe.

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Formular-Optionen