%20Ping%20zu%20starten%2C%20w%C3%A4hrend%20das%20Netzwerk%20nicht%20erreichbar%20ist%3F.png)
Mein Ping-Befehl (unter Debian 6 oder 7) versucht wiederholt, einen Server anzupingen, auch wenn das Netzwerk ausgefallen ist.WennDas Netzwerk war beim Start aktiv. Gibt es eine Möglichkeit, einen Ping zu starten, während das Netzwerk ausgefallen ist, und dasselbe Verhalten zu erzielen?
Hier ist ein Beispiel. Wenn ich einen sich wiederholenden Ping starte, während das Netzwerk aktiv ist, und während der Ping ausgeführt wird, das Netzwerk ausfällt, wird der Ping weiterhin wiederholt. Wenn das Netzwerk wieder aktiv ist, wird der Ping fortgesetzt:
me@here:~$ ping -n 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=46 time=117 ms
...
64 bytes from 8.8.8.8: icmp_req=6 ttl=46 time=116 ms
ping: sendmsg: Network is unreachable
...
ping: sendmsg: Network is unreachable
64 bytes from 8.8.8.8: icmp_req=108 ttl=46 time=694 ms
...
Wenn das Netzwerk jedoch ausgefallen ist, während ich einen Ping ausführe:
me@here:~$ ping -n 8.8.8.8
connect: Network is unreachable
me@here:~$
Es handelt sich hierbei um das gleiche Problem mit dem nicht erreichbaren Netzwerk, allerdings unternimmt Ping keine weiteren Versuche, bis das Netzwerk wieder verfügbar ist, wie dies zuvor der Fall war.
Antwort1
Sie können eine While-Schleife in einem Shell-Skript verwenden:
failed=1 # any number not equal to zero
while [ $failed -ne 0 ]
do
ping -n 8.8.8.8
failed=$?
done
# after the $? becomes "0" it will get out of the while loop
echo "ping succeeded"
Um das ständige Drucken der connect: Network is unreachable
Meldung zu beenden, können Sie die Zeile mit Ping wie folgt bearbeiten:
ping -n 8.8.8.8 2> /dev/null
Oder Sie können eine sleep
Schleife hinzufügen, um die Anzahl dieser Nachrichten zu reduzieren.
Das Skript kann vereinfacht werden zu
while ! ping -n 8.8.8.8
do
sleep 1
done
Damit lässt sich Folgendes in einer Zeile schreiben:
while ! ping -n 8.8.8.8; do sleep 1; done
Antwort2
Soweit ich weiß, ping
wird es nicht ausgeführt, wenn es keinen Socket auf einer Schnittstelle öffnen kann (weil die Schnittstelle ausgefallen ist). Wenn Sie Ihre Geräte mit überprüfen ip link show
, sehen Sie, welche Gerätehochoderrunter.
Versuchen Sie zuerst, das Netzwerkgerät zu aktivieren.
$ sudo ip link set <iface> up
$ ping -n 8.8.8.8
Ich habe dies auf meiner Arch Linux-Box getestet mit einemrunterWiFi-Schnittstelle und einehochvirtuelle Ethernet-Schnittstelle (keine IP-Adresse zugewiesen). A ping
auf ersterem beendet, während letzteres ping
kontinuierlich ist.
Andernfalls verwenden Sie das Shell-Skript des Netzwerkers.
Antwort3
Sie können fping
mit den Optionen -l
und -I
anstelle von verwenden ping
. Dazu müssen Sie den Namen der Schnittstelle kennen und als Root ausführen:
root@here:~# fping -l -I wlan0 -n 8.8.8.8
me@here:~$ sudo fping -l -I eth0 -n 8.8.8.8