2010-05-27 6 views
10

Ich brauche ein Bash (oder ein einfaches Shell) Skript um einen Cronjob zu erstellen, der jede Minute prüft, ob das Internet läuft. DieseBash Skript um (mehr oder weniger) zuverlässig zu überprüfen, ob das Internet aktiv ist

ist, wie ich es tat:

#! /bin/sh 

host1=google.com 
host2=wikipedia.org 
curr_date=`date +"%Y%m%d%H%M"` 

echo -n "${curr_date};" 
((ping -w5 -c3 $host1 || ping -w5 -c3 $host2) > /dev/null 2>&1) && 
echo "up" || (echo "down" && exit 1) 

Wie würden Sie es tun? Welche Hosts würden Sie anpingen? Klärungen

:

  • Mit "Internet ist bis", ich meine meine Internetverbindung.

  • Mit „up“, meine ich nutzbare Verbindung haben (nicht wirklich wichtig, wenn wir über die DNS oder wobei die Verbindung nach unten sprechen, ist wirklich sehr langsam [Geist der -w für timeout]). Aus diesem Grund habe ich auch keine IP, sondern nur Hosts einbezogen.

Soll ich auch Ping-Stack-Überlauf? Ich meine, wenn ich nicht auf Google, Wikipedia oder Stack Overflow zugreifen kann, will ich kein Internet: p

+0

Google ist das, was ich immer zu testen, ob ich eine Verbindung habe. –

+0

8.8.8.8 wäre auch gut, vor allem, weil es Multicast ist. –

+6

Das Internet als Ganzes ist generell "up". Ihre Verbindung dazu darf jedoch nicht sein! ;-) –

Antwort

5

Das scheint eine gute Lösung zu sein. Fügen Sie einfach ein paar weitere Hosts und vielleicht einige reine IP-Hosts hinzu, so dass Sie sich nicht auf DNS-Funktionen verlassen müssen (was an sich von Ihrer Definition von "up" abhängt).

+1

Eigentlich abhängig von DNS-Funktion könnte eine gute Sache sein. Wenn Sie die Funktion "Ich kann im Internet normal surfen" überprüfen können, ist DNS-Unterstützung A Good Thing (TM) erforderlich. –

1

Welchen Teil der Internetverbindung möchten Sie überprüfen? DHCP? DNS? Körperlich an eine Buchse angeschlossen? Kernel erkennt die Anwesenheit der NIC?

Sie können den DNS-Server Ihres Internetdienstanbieters manuell mit dem Befehl host(1) abfragen. Dies ist im Allgemeinen ein guter Hinweis darauf, ob Ihr Router seine Verbindung zum ISP verloren hat.

Sie können abfragen, welche Schnittstellen Ihr Kernel hat, indem Sie netstat(8) oder ifconfig(8) verwenden.

Sie können detaillierte Statistiken über die Schnittstelle mit ifstat erhalten.

4

Dank für Ihren Code, es funktioniert gut, ich habe eigentlich nur eine Zeile links:

((ping -w5 -c3 8.8.8.8 || ping -w5 -c3 4.2.2.1) > /dev/null 2>&1) && echo "up" || (echo "down" && exit 1) 
Verwandte Themen