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.
Comments
Display comments as Linear | Threaded
Gast on :
Dankr dir - ich habe momentan auch öfters unerklärliche Abbrüche bei meiner FrotzBox 7170.
Sergej on :
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 on :
Danke für das script, es scheint super zu funktionieren und ist eine echte Hilfe.