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