當網路無法存取時,有什麼方法可以啟動(重複)ping 嗎?

當網路無法存取時,有什麼方法可以啟動(重複)ping 嗎?

即使網路關閉,我的 ping 指令(在 Debian 6 或 7 上)也會重複嘗試 ping 伺服器,如果啟動時網路已啟動。有什麼方法可以在網路關閉時啟動 ping 並獲得相同的行為嗎?

這是一個例子。如果我在網路正常運作時啟動重複 ping,而當 ping 運作時,網路發生故障,則 ping 會繼續重複。如果網路恢復,它將繼續 ping:

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
...

但是,如果我執行 ping 時網路已關閉:

me@here:~$ ping -n 8.8.8.8
connect: Network is unreachable
me@here:~$

這是同樣的無法存取的網路問題,但 ping 不會繼續嘗試,直到網路再次啟動為止,就像以前一樣。

答案1

您可以在 shell 腳本中使用 while 循環:

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"

若要停止繼續列印connect: Network is unreachable訊息,您可以使用 ping 編輯該行,如下所示:

ping -n 8.8.8.8 2> /dev/null

或者您可以sleep在循環中添加一個來減少這些訊息的數量。

該腳本可以簡化為

while ! ping -n 8.8.8.8
do
    sleep 1
done

這讓它可以寫成一行:

while ! ping -n 8.8.8.8; do sleep 1; done

答案2

如果AFAICTping無法開啟介面上的套接字(因為介面已關閉),則它不會運作。如果您使用 檢查您的設備ip link show,您將看到哪些設備向上或者向下

首先嘗試啟動網路設備。

$ sudo ip link set <iface> up
$ ping -n 8.8.8.8

我已經在我的 Arch Linux 機器上測試了這個向下wifi介面,以及向上虛擬乙太網路(未分配 IP 位址)介面。ping前者的A退出,而後者則ping持續。

否則,使用networker的shell腳本。

答案3

您可以使用fping它的-l-I選項,而不是ping.這需要知道介面的名稱,並以 root 身分運行:

root@here:~# fping -l -I wlan0 -n 8.8.8.8

me@here:~$ sudo fping -l -I eth0 -n 8.8.8.8

相關內容