
私の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
または、ループ内にを追加して、それらのメッセージの数を減らすこともできます。
スクリプトは次のように簡略化できます。
while ! ping -n 8.8.8.8
do
sleep 1
done
こうすると、1 行で記述できます。
while ! ping -n 8.8.8.8; do sleep 1; done
答え2
私の知る限り、ping
インターフェースでソケットを開けない場合(インターフェースがダウンしているため)は実行されません。デバイスを で確認するとip link show
、どのデバイスが上または下。
まずネットワークデバイスをアクティブ化してみてください。
$ sudo ip link set <iface> up
$ ping -n 8.8.8.8
私はArch Linuxボックスでこれをテストしました下wifiインターフェース、および上仮想イーサネット (IP アドレスが割り当てられていない) インターフェイス。ping
前者の A は終了しますが、後者はping
継続します。
それ以外の場合は、networker のシェル スクリプトを使用します。
答え3
の代わりに、およびオプションfping
とともにを使用できます。これには、インターフェースの名前を知っていて、root として実行する必要があります。-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