scripts script programas operadores logicos for ejemplos ciclo bash

programas - scripts bash ejemplos



¿Cómo crear un bucle en bash que está esperando que un servidor web responda? (7)

Combinando la pregunta con la respuesta de chepner, esto funcionó para mí:

until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do printf ''.'' sleep 5 done

¿Cómo crear un bucle en bash que está esperando que un servidor web responda?

Debería imprimir un "." cada 10 segundos más o menos, y espere hasta que el servidor comience a responder.

Actualización, este código prueba si obtengo una buena respuesta del servidor.

if curl --output /dev/null --silent --head --fail "$url"; then echo "URL exists: $url" else echo "URL does not exist: $url" fi


El uso de backticks ` ` está outdated . Use $( ) lugar:

until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do printf ''.'' sleep 5 done


Interesante rompecabezas Si no tiene acceso o una API asíncrona con su cliente, puede intentar agrupar sus conectores tcp de la siguiente manera:

until grep ''***IPV4 ADDRESS OF SERVER IN REVERSE HEX***'' /proc/net/tcp do printf ''.'' sleep 1 done

Pero esa es una espera ocupada con intervalos de 1 segundo. Probablemente quieras más resolución que eso. También esto es global. Si se realiza otra conexión a ese servidor, los resultados no son válidos.


Quería limitar la cantidad máxima de intentos. Basado en la respuesta aceptada de Thomas, hice esto:

attempt_counter=0 max_attempts=5 until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do if [ ${attempt_counter} -eq ${max_attempts} ];then echo "Max attempts reached" exit 1 fi printf ''.'' attempt_counter=$(($attempt_counter+1)) sleep 5 done


httping es bueno para esto. simple, limpio, tranquilo.

while ! httping -qc1 http://myhost:myport ; do sleep 1 ; done

while / until etc es una preferencia personal.


si necesita comprobar si el servidor está disponible, porque se está reiniciando o algo más, podría intentar hacer un wget en el servidor y analizar la respuesta o el error, si obtiene un 200 o incluso un 404, el servidor está activo, podría cambiar el tiempo de espera de wget con --timeout = segundos, podría establecer un tiempo de espera de 10 segundos y hacer un ciclo hasta que grep sobre la respuesta tenga un resultado.

No sé si esto es lo que estás buscando o realmente necesitas el código bash.


wait-on es una utilidad de línea de comandos multiplataforma y la API Node.js que esperará a que los recursos de archivos, puertos, sockets y http (s) estén disponibles: https://github.com/jeffbski/wait-on

Por ejemplo, espere: 8080 por 5 segundos y haga NEXT_CMD si tiene éxito.

wait-on -t 5000 http-get://localhost:8080/foo && NEXT_CMD