Existe alguma maneira de iniciar um ping (repetitivo) enquanto a rede está inacessível?

5

Meu comando ping (no Debian 6 ou 7) repetidamente tentará fazer ping em um servidor mesmo quando a rede estiver inativa, se a rede estiver ativa quando foi iniciada. Existe alguma maneira de iniciar o ping enquanto a rede está inativa e obter esse mesmo comportamento?

Aqui está um exemplo. Se eu iniciar um ping repetitivo enquanto a rede está ativa, e enquanto o ping está sendo executado, a rede cai, o ping continua a se repetir. Se a rede voltar, continuará pingando:

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
...

No entanto, se a rede estiver inativa quando eu executar o ping:

me@here:~$ ping -n 8.8.8.8
connect: Network is unreachable
me@here:~$

Este é o mesmo problema de rede inacessível, mas o ping não continua tentando até que a rede esteja ativa novamente, como antes.

    
por Dan Getz 14.06.2014 / 19:24

3 respostas

6

Você pode usar um loop while em um script de shell:

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"

Para deixar de imprimir a mensagem connect: Network is unreachable , você pode editar a linha com ping assim:

ping -n 8.8.8.8 2> /dev/null

Ou você pode adicionar um sleep no loop para reduzir o número dessas mensagens.

O script pode ser simplificado para

while ! ping -n 8.8.8.8
do
    sleep 1
done

Que permite que seja escrito em uma linha:

while ! ping -n 8.8.8.8; do sleep 1; done
    
por 14.06.2014 / 19:30
1

Você pode usar fping com suas opções -l e -I , em vez de ping . Isso requer conhecer o nome da interface e ser executado como root:

root@here:~# fping -l -I wlan0 -n 8.8.8.8

me@here:~$ sudo fping -l -I eth0 -n 8.8.8.8
    
por 18.06.2014 / 17:51
1

AFAICT, ping não será executado se não puder abrir um soquete em uma interface (porque a interface está inativa). Se você verificar seus dispositivos com ip link show , verá quais dispositivos estão para cima ou para baixo .

Tente ativar o dispositivo de rede primeiro.

$ sudo ip link set <iface> up
$ ping -n 8.8.8.8

Eu testei isso na minha caixa Arch Linux com uma interface wifi down , e uma interface up virtual ethernet (sem endereço IP atribuído). Um ping no primeiro sai, enquanto o segundo ping é contínuo.

Caso contrário, use o shell script do networker.

    
por 15.06.2014 / 06:22