54 votos

Cómo hacer ping en linux hasta host es conocido?

Cómo puedo hacer ping a una dirección determinada y cuando se encuentra, deje de hacer ping.

Quiero utilizar en un script de bash, así que cuando el host está en marcha, el guión sigue haciendo ping y desde el momento en que el host está disponible, el guión sigue...

91voto

nullDev Puntos 1778

Una mayor simplificación de Martynas' respuesta:

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

tenga en cuenta que ping a sí mismo (negada por !) se utiliza como la prueba del bucle; tan pronto como se realice correctamente, el bucle termina. El cuerpo del bucle está vacío, con el null comando ":" que se utiliza para evitar un error de sintaxis.

29voto

Aaron Copley Puntos 6043

Sé que el tema es viejo... y pregunte específicamente sobre ping, pero quería compartir mi solución.

Yo uso esta al reiniciar hosts para saber cuando puedo SSH de nuevo en ellos de nuevo. (Desde ping responderá por varios segundos antes de sshd se ha iniciado.)

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

26voto

bk1e Puntos 13737

Usted puede hacer un bucle, enviar un ping y dependiendo del estado de romper el bucle, por ejemplo (bash):

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

Poniendo esto en alguna parte en su secuencia de comandos de bloque, hasta www.google.com se le puede enviar un ping.

11voto

Baxissimo Puntos 1822

Ping al host de destino una vez. Compruebe si el ping logrado (valor de retorno del comando ping es cero). Si el host no está vivo, ping de nuevo.

El código siguiente puede ser guardado como un archivo, y se llama con el nombre de host como argumento, o despojado de la primera y la última línea y se utiliza como función dentro de una secuencia de comandos existente (waitForHost nombre de host).

El código no evaluar la causa para el fracaso si el ping no se traduce en una respuesta, por lo tanto el bucle para siempre si el host no existe. Mi BSD manual de listas el significado de cada valor de retorno, mientras que el linux no lo hace, así que supongo que esto podría no ser portable, es por eso que me dejaron.

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

9voto

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

Usted puede quitar el sueño 1, es sólo aquí para evitar cualquier problema de inundaciones en caso de que el host sería reacheable pero el ping no iba a salir con el código 0.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: