ホストが表示されたときに `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

関連情報