
即使網路關閉,我的 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