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

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

내 ping 명령(Debian 6 또는 7)은 네트워크가 다운된 동안에도 서버에 반복적으로 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는 종료되고 후자는 ping계속됩니다.

그렇지 않은 경우에는 networker의 쉘 스크립트를 사용하십시오.

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

관련 정보