Gibt es eine Möglichkeit, einen (wiederholten) Ping zu starten, während das Netzwerk nicht erreichbar ist?

Gibt es eine Möglichkeit, einen (wiederholten) Ping zu starten, während das Netzwerk nicht erreichbar ist?

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 unreachableMeldung 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 sleepSchleife 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ß, pingwird 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 pingauf ersterem beendet, während letzteres pingkontinuierlich ist.

Andernfalls verwenden Sie das Shell-Skript des Netzwerkers.

Antwort3

Sie können fpingmit den Optionen -lund -Ianstelle 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

verwandte Informationen