네트워크에 연결할 수 없을 때 (반복) ping을 시작하는 방법이 있습니까?

네트워크에 연결할 수 없을 때 (반복) ping을 시작하는 방법이 있습니까?

네트워크가 다운된 경우에도 내 ping 명령(Debian 6 또는 7)은 반복적으로 서버에 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:~$

연결할 수 없는 네트워크 문제와 동일하지만 이전처럼 네트워크가 다시 나타날 때까지 핑이 계속 시도되지 않습니다.

답변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

이렇게 하면 한 줄로 작성할 수 있습니다.

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

답변2

AFAICT ping인터페이스의 소켓을 열 수 없으면(인터페이스가 닫혀 있기 때문에) 실행되지 않습니다. 다음 명령을 사용하여 장치를 확인하면 ip link show어떤 장치가 있는지 확인할 수 있습니다.위로또는아래에.

먼저 네트워크 장치를 활성화해 보세요.

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

내 Arch Linux 시스템에서 이것을 테스트했습니다.아래에Wi-Fi 인터페이스 및위로가상 이더넷(IP 주소가 할당되지 않음) 인터페이스. ping전자의 A는 종료되고 후자의 경우 pingA는 지속됩니다.

그렇지 않으면 네트워크 담당자의 쉘 스크립트를 사용하십시오.

답변3

대신 fping해당 -l및 옵션을 사용할 수 있습니다 . 이를 위해서는 인터페이스 이름을 알고 루트로 실행해야 합니다.-Iping

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

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

관련 정보