![호스트가 나타날 때 `ping -c 1 -W 1800 somehost`가 성공하지 못하는 이유는 무엇입니까?](https://linux55.com/image/166560/%ED%98%B8%EC%8A%A4%ED%8A%B8%EA%B0%80%20%EB%82%98%ED%83%80%EB%82%A0%20%EB%95%8C%20%60ping%20-c%201%20-W%201800%20somehost%60%EA%B0%80%20%EC%84%B1%EA%B3%B5%ED%95%98%EC%A7%80%20%EB%AA%BB%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음 명령을 실행하여 호스트가 재부팅에서 복구된 시기를 감지하려고 합니다.
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