Shell-Script
有什麼方法可以在網路無法訪問時啟動(重複)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 不會繼續嘗試,直到網路再次啟動,就像以前一樣。
您可以在 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