Gibt es eine einfache Möglichkeit, die Internetverbindung von der Konsole aus zu überprüfen? Ich versuche, in einem Shell-Skript herumzuspielen. Ich scheine die Idee zu haben , den HTTP-Antwortcode zu überprüfen, um zu interpretieren, ob die Internetverbindung einwandfrei funktioniert. Aber ich denke, es muss ein einfacher Weg sein, ohne eine Seite zu überprüfen, die niemals abstürzt;)wget --spider http://www.google.co.in/
Edit: Scheint so, als ob es viele Faktoren geben kann, die individuell untersucht werden können, eine gute Sache. Im Moment ist es meine Absicht zu überprüfen, ob mein Blog ausgefallen ist. Ich habe Cron eingerichtet, um es jede Minute zu überprüfen. Dazu überprüfe ich den HTTP-Antwortcode von wget -spider in meinem Blog. Wenn es nicht 200 ist, benachrichtigt es mich (ich glaube, dies ist besser, als nur zu pingen, da die Site unter starker Last sein kann und eine Zeitüberschreitung aufweist oder sehr spät reagiert). Gestern gab es ein Problem mit meinem Internet. LAN war gut verbunden, aber ich konnte auf keine Seite zugreifen. Daher erhalte ich immer wieder Benachrichtigungen, da das Skript in der wget-Antwort keine 200 gefunden hat. Jetzt möchte ich sicherstellen, dass eine Benachrichtigung angezeigt wird, wenn eine Internetverbindung besteht.
Die Überprüfung auf DNS- und LAN-Konnektivität ist für mich ein bisschen übertrieben, da ich nicht so genau herausfinden muss, um welches Problem es sich handelt. Also, was schlagen Sie vor, wie ich es mache?
Hier ist mein Skript, mit dem ich die Ausfallzeiten meines Blogs überprüfen kann:
#!/bin/bash
# Sending the output of the wget in a variable and not what wget fetches
RESULT=`wget --spider http://blog.ashfame.com 2>&1`
FLAG=0
# Traverse the string considering it as an array of words
for x in $RESULT; do
if [ "$x" = '200' ]; then
FLAG=1 # This means all good
fi
done
if [ $FLAG -eq '0' ]; then
# A good point is to check if the internet is working or not
# Check if we have internet connectivity by some other site
RESULT=`wget --spider http://www.facebook.com 2>&1`
for x in $RESULT; do
if [ "$x" = '200' ]; then
FLAG=1 # This means we do have internet connectivity and the blog is actually down
fi
done
if [ $FLAG -eq '1' ]; then
DISPLAY=:0 notify-send -t 2000 -i /home/ashfame/Dropbox/Ubuntu/icons/network-idle.png "Downtime Alert!" "http://blog.ashfame.com/ is down."
fi
fi
exit
Auf diese Weise muss ich nur dann auf Internetverbindung prüfen, wenn ein Problem mit meinem Blog-Antwortcode vorliegt. Es ist ein bisschen schwer (da ich kein Ping verwende), sollte aber keine falsch positiven Ergebnisse liefern. Recht? Wie kann ich auch das Pingen zu einer anderen Site, wie Facebook, Google, Yahoo usw., zufällig einstellen? Auch (ich habe versucht, jegliche E / A zu vermeiden) kann ich in eine Protokolldatei schreiben, mit der ich die Anzahl der Ausfallzeitprüfungen und -prüfungen überprüfen kann Überspringen Sie dann weitere Überprüfungen, bis die Site nicht mehr verfügbar ist, oder führen Sie längere Überprüfungen durch (10 Minuten statt jeder Minute). Was denkst du?
quelle
Antworten:
Überprüfen, ob eine bestimmte Website aktiv ist
Erstens sind mehrere gute Online-Überwachungsdienste verfügbar. Pingdom enthält ein kostenloses Konto für die Überwachung eines Ziels. (Disclaimer: Ich bin nicht mit Pingdom in irgendeiner Weise verbunden).
Zweitens ist die Verwendung eines
wget --spider
eigenen Skripts eine gute Idee. Sie erhalten einige Fehlalarme, wenn Ihr Computer heruntergefahren ist oder wenn Ihr DNS-Server nicht funktioniert. Das Überprüfen des Rückkehrcodes ist eine einfache Möglichkeit, dies zu implementieren:Wiederum weist dieser Ansatz Mängel auf. Wenn Ihr Provider Ihren DNS-Eintrag zwischengespeichert hat, der DNS-Server jedoch nicht verfügbar ist, können andere Benutzer nicht auf Ihre Site zugreifen, obwohl die Überwachung anzeigt, dass alles in Ordnung ist. Sie können kurze Abhilfe mit schreiben
host
, zum Beispielhost example.com <your dns server IP>
. Dies gibt einen Fehler zurück, wenn der DNS-Server nicht antwortet, auch wenn OpenDNS oder der DNS-Server Ihres eigenen Anbieters einwandfrei funktionieren.Überprüfen Sie, ob das Internet funktioniert
Es ist nicht in jedem Fall einfach, damit umzugehen.
Sie können beispielsweise
ping -c1
auf mehreren bekannten Websites (z. B. www.google.com, facebook.com und ping.funet.fi) ausgeführt und die Rückkehrcodes überprüfen, um festzustellen, ob ein Ziel erreichbar ist. Sie können den Rückgabecode mithilfe der Variablen automatisch überprüfen$?
. Der Parameter-c1
begrenzt die Anzahl der Ping-Pakete auf eins.Bei einigen öffentlichen WLANs können Probleme auftreten, wenn ein Anmeldegateway vorhanden ist, das alle Pings und HTTP-Anforderungen umleitet. In diesem Fall erhalten Sie möglicherweise Ping-Antworten und fehlerfreie HTTP-Statuscodes, auch wenn Sie nicht auf andere Websites zugreifen können.
Wenn Sie den Kabelstatus überprüfen möchten, können Sie verwenden
Aus der Ausgabe (Auszug):
Dies sagt jedoch nichts darüber aus, ob Sie wirklich über eine Verbindung verfügen oder nicht, sondern nur, ob ein Kabel angeschlossen ist und sich etwas auf der anderen Seite befindet.
quelle
host
(DNS-Abfrage) verwenden. Es ist auch sehr schnell.Ich benutze diese Methode ...
quelle
ping -c 1 8.8.8.8
undping -c 1 www.google.com
. Wie ist das?Ich habe gerade benutzt
Dies hält an, bis der Netzwerkmanager eine Netzwerkverbindung hergestellt hat. Gut gearbeitet. Sie können auch andere Sachen damit machen.
quelle
Die Überprüfung, ob eine Site aktiv ist, erfolgt normalerweise mit einem Überwachungstool wie
nagios
. Dadurch wird die Site kontinuierlich überwacht und Sie können über Ausfälle informiert werden.Wenn ich über die Befehlszeile überprüfe, ob das Internet verfügbar ist, führe ich eine Reihe von Schritten aus:
ping google.com
(überprüft DNS und die bekannte erreichbare Site).wget
oderw3m
um die Seite abzurufen.Wenn das Internet nicht verfügbar ist, diagnostizieren Sie es nach außen.
Wenn das Internet funktioniert, die Site jedoch nicht funktioniert,
w3m http://isup.me/example.com
ersetzen Sie sieexample.com
durch die Site, die nicht funktioniert. Verwenden Sie wget, lynx oder einen beliebigen verfügbaren Befehlszeilenbrowser, wenn der w3m-Browser nicht installiert ist.quelle
if ! wget --spider http:///example.com; then
.[ $? != 0 ]
ist der gleiche wie der Test! command
. Es ist dokumentiert, dass wget bei Erfolg 0 und nicht 0 für Fehler zurückgibt. Das if verhält sich auf jede Art und Weise, wie Sie es codieren, identisch. Wenn wget bei einer Antwort von 200 einen Fehler zurückgibt, schlägt der Test in beiden Fällen fehl. Dasselbe gilt, wenn für einen anderenDies ist das Shell-Skript, mit dem ich die Internetverbindung teste:
alarm.sh
Du musst curl und mpg321 installieren
Sie benötigen eine MP3-Audiodatei, die im selben Ordner in alarm.mp3 umbenannt wurde, wenn Sie akustische Alarmfunktionen wünschen. Schließlich konfigurieren Sie die URL der Website und passen egrep an Ihre Bedürfnisse an.
quelle
egrep -q
stattegrep ... > /dev/null
while
Schleife zu verwenden?alarm.sh
im wd aufgerufen wird. Wenn Sie dieses Skript also aus einem anderen Verzeichnis aufrufen, tritt entweder ein Fehler auf, oder wennalarm.sh
im wd ein Skript aufgerufen wird, wird dies stattdessen aufgerufen. Das ist also schlechte Praxis. Sie könnten"$0"
stattdessen verwenden, aber einewhile
Schleife wäre besser.Überprüfen Sie, ob das Internet funktioniert
Aus der Ausgabe (Auszug):
Wie von anderen erwähnt, sagt dies jedoch nichts darüber aus, ob Sie wirklich eine Verbindung haben oder nicht. Z.B. Sie könnten mit dem Router verbunden sein und der Router muss nicht unbedingt mit dem Internet verbunden sein.
quelle
nm-tool
wurde in Ubuntu 15.04+ entfernt, kann abernmcli
stattdessen verwendet werden. ZB[[ $(nmcli -f STATE -t g) = connected ]]
nmcli -f STATE -t nm
das Gute ist, unabhängig von Websites zu sein!nm-tool
undnmcli
Ihnen sagen nur , ob oder nicht Sie verbunden sind lokale Netzwerke, das heißt , ob Sie mit Ihrem Heim WiFi verbunden sind / Ethernet. Es sagt Ihnen nicht, ob Sie etwas außerhalb Ihres lokalen Netzwerks erreichen können, z. B. das Internet.Ich benutze diese Methode:
Es wird versucht, eine Verbindung zu einer bekannten Website herzustellen. Wenn eine Verbindung hergestellt werden kann, wird davon ausgegangen, dass das Internet vorhanden ist.
quelle
Ich brauchte Hilfe bei der gleichen Frage und bekam meine Antwort auf diese Weise:
quelle
nm-online
Befehls überprüft ... Es wird 0 zurückgegeben, wenn alles in Ordnung ist. Üblich in allenUNIX
Schalen.Es ist nicht so einfach zu überprüfen, ob das Internet funktioniert. Ping ist ICMP, daher funktioniert es möglicherweise auch, wenn der Webproxy nicht verfügbar ist. Ähnliches tritt bei DNS auf, wenn Sie mit einer IP testen.
Da meine Internetverbindung instabil ist, habe ich dieses Skript ( basierend auf diesem Skript ) erstellt, das einen sanften Akkordton ausgibt, um mich anzurufen, und Ubuntu-Benachrichtigung verwendet, wenn die Internetverbindung wieder hergestellt wird:
quelle
Ich suchte nach einem Skript, das meine Internetverbindung kontinuierlich testet und das gestartet wird, sobald mein Server hochgefahren ist.
Installieren Sie zuerst fping
Erstelle ein Init-Skript im Ordner /etc/init.d mit folgendem Inhalt (ich habe es testcon genannt)
Erstelle ein Skript im Ordner /etc/init.d mit folgendem Inhalt (ich habe es testcond genannt)
Dann führe ich die folgenden Befehle aus, um sie dem Start hinzuzufügen:
Starten Sie neu
quelle
Ich war mit zufälligen Ausfällen von WLAN-Verbindungen durch meinen
Broadcom BCM94331CD
Chip konfrontiert . Ich habe das folgende Bash-Skript (Endlosschleife) entwickelt, das jede Sekunde überprüft, ob die Internet-Wi-Fi-Verbindung funktioniert. Andere hier vorgeschlagene Befehlszeilen warten mindestens 5 bis 10 Sekunden, bevor sie mit einem Status geschlossen werden, dping
. H. In der Zwischenzeit suche ich auch nach einer endgültigen Lösung.Aus den Ergebnissen von askubuntu muss ich das
bcmwl-kernel-source
Paket löschen, während ichfirmware-b43-installer
und verwendeb43-fwcutter
.Vielen Dank an alle für ihre Vorschläge (oben).
Dieses Skript muss in den Startprogrammen hinzugefügt werden und benötigt keine
super user
Berechtigung, um ausgeführt zu werden.quelle