GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie pinge ich in Linux, bis der Host bekannt ist?

Lösung 1:

Eine weitere Vereinfachung der Antwort von Martynas:

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

Beachten Sie, dass Ping selbst als Schleifentest verwendet wird. sobald es erfolgreich ist, endet die Schleife. Der Schleifenkörper ist leer, mit dem Nullbefehl „: " verwendet, um einen Syntaxfehler zu verhindern.

Update:Ich dachte an eine Möglichkeit, Control-C dazu zu bringen, die Ping-Schleife sauber zu verlassen. Dadurch wird die Schleife im Hintergrund ausgeführt, das Interrupt-Signal (Control-C) abgefangen und die Hintergrundschleife beendet, wenn es auftritt:

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"

Es ist ein bisschen umständlich, aber wenn Sie möchten, dass die Schleife abgebrochen werden kann, sollte es den Zweck erfüllen.

Lösung 2:

Ich weiß, die Frage ist alt ... und fragt speziell nach ping , aber ich wollte meine Lösung teilen.

Ich verwende dies beim Neustart von Hosts, um zu wissen, wann ich wieder per SSH wieder auf sie zugreifen kann. (Seit ping antwortet einige Sekunden vor sshd gestartet.)

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

Lösung 3:

Sie können eine Schleife machen, einen Ping senden und je nach Status die Schleife unterbrechen, zum Beispiel (bash):

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

Wenn Sie dies irgendwo in Ihr Skript einfügen, wird es blockiert, bis www.google.com ist pingbar.

Lösung 4:

Pingen Sie den Zielhost einmal. Prüfen Sie, ob der Ping erfolgreich war (Rückgabewert von Ping ist Null). Wenn der Host nicht aktiv ist, pingen Sie erneut.

Der folgende Code kann als Datei gespeichert und mit dem Hostnamen als Argument aufgerufen werden oder die erste und letzte Zeile entfernen und als Funktion innerhalb eines bestehenden Skripts (waitForHost Hostname) verwendet werden.

Der Code wertet die Fehlerursache nicht aus, wenn der Ping nicht zu einer Antwort führt, wodurch eine Endlosschleife ausgeführt wird, wenn der Host nicht vorhanden ist. Meine BSD-Manpage listet die Bedeutung jedes Rückgabewerts auf, während die Linux-Manpage dies nicht tut, also schätze ich, dass dies nicht portierbar ist, deshalb habe ich es weggelassen.

#!/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

Lösung 5:

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

Sie können sleep 1 entfernen, es ist nur hier, um ein Flooding-Problem zu verhindern, falls der Host erreichbar wäre, aber Ping nicht mit Code 0 beendet würde.


Linux
  1. So wiederholen Sie einen Befehl, bis er in Linux erfolgreich ist

  2. So installieren und verwenden Sie den Ping-Befehl unter Linux

  3. So deaktivieren Sie Ping-Antworten in Linux mit icmp_echo_ignore_all

  4. Wie überschleife ich Verzeichnisse in Linux?

  5. Linux:Pingen Sie alle Hosts im Subnetz

So installieren und verwenden Sie den Ping-Befehl unter Linux

So pingen Sie eine Portnummer in Linux an

Funktionsweise des Ping-Programms unter Linux

Linux-Ping-Befehl

So sichern Sie einen Remote-Linux-Host mit dem Dienstprogramm rsnapshot rsync

So deaktivieren Sie die Überprüfung des SSH-Hostschlüssels in Linux