호스트가 나타날 때 `ping -c 1 -W 1800 somehost`가 성공하지 못하는 이유는 무엇입니까?

호스트가 나타날 때 `ping -c 1 -W 1800 somehost`가 성공하지 못하는 이유는 무엇입니까?

다음 명령을 실행하여 호스트가 재부팅에서 복구된 시기를 감지하려고 합니다.

ping -c 1 -W 1800 myhost

나는 호스트가 30분 전에 성공적으로 ping할 수 있기를 원하며 내 스크립트에서 ssh호스트로서 몇 가지 작업을 수행할 수 있습니다. 그러나 호스트는 30분이 지나기 전에 시작됩니다. 성공하지 못한 채 ping myhost명령줄에서 수동으로 실행하여 이를 확인할 수 있습니다 ping -c 1 -W 1800 myhost. 시간이 초과되었습니다.

내 운영 체제는 다음과 같습니다

$ uname -a
Linux dev-001 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 15 17:36:42 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

답변1

귀하의 명령은 패킷을 보내고( -c 1) 응답을 위해 최대 30분을 기다리라는 것입니다( -W 1800).

단일 패킷을 보낼 때 호스트가 다운될 수 있으므로 응답을 보낼 가능성이 낮으므로 ping최종 기한에 도달하여 실패가 반환될 때까지 기다려야 합니다.

불행하게도 "성공할 때까지" 쉬운 방법은 없으므로 ping루프로 합성해야 합니다. 이 대기 시간은 최대 1800초이며 5초마다 ping이 전송됩니다.

end=$(($(date +%s) + 1800))
while [[ $(date +%s) -lt $end ]]
do
    ping -c 1 -i 5 -w 30 -q myhost && break
done

관련 정보