私は非常に単純な小さなスクリプトを持っています。デフォルトでは、特定のドメインに対してpingを実行します。次のようになります。
ping -c2 $1 | head -n4
たとえば、次のように印刷されます。
PING google.com (172.217.17.206): 56 data bytes
64 bytes from 172.217.17.206: icmp_seq=0 ttl=55 time=2.474 ms
64 bytes from 172.217.17.206: icmp_seq=1 ttl=55 time=2.668 ms
それは私にとって問題ではありません。
しかし、例えば、ご存知のように、pingコマンドがICMP要求に対する応答を返さない場合があります。たとえば、
ping intel.com
PING intel.com (13.91.95.74): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
--- intel.com ping statistics ---
これが発生すると、スクリプトは数秒間停止し、続行します。このようなことが起こったらスキップして進む方法を考えようと努力します。実際にこれが可能かどうかはわかりません。最初は、「リクエストタイムアウト」を示すためにgrepにパイピングするか、結果を変数に入れてcat |
誰でも方法を考えることができますか?リクエストがタイムアウトした場合は実行をスキップできますか?
ベストアンサー1
-W
サーバーが応答しないときに「数秒」の間停止したくない場合は、このオプションを使用してタイムアウトを追加してください。たとえば、
ping -c2 -W2 "$1"
-W2
時間を2秒に設定してください。必要に応じて制限を変更してください。
横に
シェル変数を引用するときに明示的に知りたくない限り、必ず二重引用符$1
で囲んでください。"$1"
噴射そしてパス名拡張。
文書
からman ping
:
-W timeout
応答を待つ時間(秒単位)です。このオプションは、応答のないタイムアウトにのみ影響します。それ以外の場合、pingは両方のRTTを待ちます。