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

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

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

Aqui está um exemplo. Se eu iniciar um ping repetido enquanto a rede estiver ativa e, enquanto o ping estiver em execução, a rede cair, o ping continuará a se repetir. Se a rede voltar a funcionar, ela continuará executando o 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
...

No entanto, se a rede estiver inativa quando executo 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.

Responder1

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 parar de imprimir a connect: Network is unreachablemensagem você pode editar a linha com ping assim:

ping -n 8.8.8.8 2> /dev/null

Ou você pode adicionar um sleeploop para reduzir o número dessas mensagens.

O script pode ser simplificado para

while ! ping -n 8.8.8.8
do
    sleep 1
done

O que permite que seja escrito em uma linha:

while ! ping -n 8.8.8.8; do sleep 1; done

Responder2

AFAICT pingnã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ãoacimaouabaixo.

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 umabaixointerface wi-fi e umacimainterface Ethernet virtual (sem endereço IP atribuído). A pingno primeiro termina, enquanto o último pingé contínuo.

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

Responder3

Você pode usar fpingcom suas opções -le , em vez de . Isso requer saber o nome da interface e executar como root:-Iping

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

me@here:~$ sudo fping -l -I eth0 -n 8.8.8.8

informação relacionada