GNU/Linux >> Linux の 問題 >  >> Linux

ホストがわかるまでLinuxでpingを実行する方法は?

解決策 1:

マルティナスの答えをさらに単純化:

until ping -c1 www.google.com >/dev/null 2>&1; do :; done

ping 自体がループ テストとして使用されることに注意してください。成功するとすぐに、ループは終了します。ループ本体は空で、null コマンド ": " 構文エラーを防ぐために使用されます。

更新:Control-C で ping ループをきれいに終了させる方法を考えました。これにより、バックグラウンドでループが実行され、割り込み (Control-C) シグナルがトラップされ、発生した場合はバックグラウンド ループが強制終了されます。

ping_cancelled=false    # Keep track of whether the loop was cancelled, or succeeded
until ping -c1 "$1" >/dev/null 2>&1; do :; done &    # The "&" backgrounds it
trap "kill $!; ping_cancelled=true" SIGINT
wait $!          # Wait for the loop to exit, one way or another
trap - SIGINT    # Remove the trap, now we're done with it
echo "Done pinging, cancelled=$ping_cancelled"

少し遠回りですが、ループをキャンセル可能にしたい場合は、うまくいくはずです。

解決策 2:

私は質問が古いことを知っています...そして特に ping に関して尋ねます 、しかし、私の解決策を共有したかった.

ホストを再起動するときにこれを使用して、いつホストに SSH で戻れるかを確認します。 (ping以降 sshd の数秒前に応答します が開始されます。)

until nc -vzw 2 $host 22; do sleep 2; done

解決策 3:

ループを実行し、1 つの ping を送信し、ステータスに応じてループを中断できます。たとえば (bash):

while true; do ping -c1 www.google.com > /dev/null && break; done

これをスクリプトのどこかに置くと、www.google.com までブロックされます ping可能です。

解決策 4:

ターゲット ホストに 1 回 ping を実行します。 ping が成功したかどうかを確認します (ping の戻り値はゼロです)。ホストが稼働していない場合は、再度 ping を実行します。

次のコードは、ファイルとして保存してホスト名を引数として呼び出すか、最初と最後の行を削除して既存のスクリプト (waitForHost ホスト名) 内の関数として使用できます。

ping が応答しない場合、コードは失敗の原因を評価しないため、ホストが存在しない場合は永遠にループします。私の BSD マンページには各戻り値の意味が記載されていますが、Linux には記載されていません。

#!/bin/bash

PING=`which ping`

function waitForHost
{
    if [ -n "$1" ]; 
    then
        waitForHost1 $1;
    else
        echo "waitForHost: Hostname argument expected"
    fi
}

function waitForHost1
{
    reachable=0;
    while [ $reachable -eq 0 ];
    do
    $PING -q -c 1 $1
    if [ "$?" -eq 0 ];
    then
        reachable=1
    fi
    done
    sleep 5
}
waitForHost $1

解決策 5:

UNREACHEABLE=1;
while [ $UNREACHEABLE -ne "0" ]; 
   do ping -q -c 1 HOST &> /dev/null; UNREACHEABLE=$?; sleep 1;
done

スリープ 1 を削除することができます。これは、ホストに到達可能であるが ping がコード 0 で終了しない場合のフラッディングの問題を防ぐためだけです。


Linux
  1. LinuxでPingコマンドをインストールして使用する方法

  2. icmp_echo_ignore_all を使用して Linux で Ping 応答を無効にする方法

  3. Linux :サブネット内のすべてのホストに ping を実行します。

  1. Linuxで成功するまでコマンドを繰り返す方法

  2. Linuxでディレクトリをループする方法は?

  3. Azure Linux VM で Ping を有効にする方法

  1. モニタリングのためにZabbixサーバーにLinuxホストを追加する方法

  2. LinuxPingコマンドの使用方法

  3. QEMUホストネットワークにpingを実行する方法は?