ネットワークがダウンしても、私の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
シェルスクリプトで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
ループに 1 つを追加して、これらのメッセージの数を減らすこともできます。
スクリプトは次のように単純化できます。
while ! ping -n 8.8.8.8
do
sleep 1
done
これにより、1行で書くことができます。
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システムでこれをテストしました。下にWi-Fiインターフェースと戻る仮想イーサネット(IPアドレスが割り当てられていない)インターフェイス。ping
前者のAは終了し、後者の場合、ping
Aは持続する。
それ以外の場合は、ネットワーク担当者のシェルスクリプトを使用してください。
答え3
代わりに対応fping
する-l
オプションを使用できます。これを行うには、インターフェイス名を知ってルートとして実行する必要があります。-I
ping
root@here:~# fping -l -I wlan0 -n 8.8.8.8
me@here:~$ sudo fping -l -I eth0 -n 8.8.8.8