%20%ED%95%91%EC%9D%84%20%EC%8B%9C%EC%9E%91%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
내 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
-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