Shell-Script

有什麼方法可以在網路無法訪問時啟動(重複)ping?

  • June 20, 2016

我的 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 不會繼續嘗試,直到網路再次啟動,就像以前一樣。

您可以在 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

引用自:https://unix.stackexchange.com/questions/137133