¿Cómo crear un bucle en bash que está esperando que responda un servidor web?
Debería imprimir un "." aproximadamente cada 10 segundos 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"; luego echo "La URL existe: $ url" más echo "URL no existe: $ url" fi
Respuestas:
Combinando la pregunta con la respuesta de Chepner, esto funcionó para mí:
fuente
$( )
lugar.--head
?--head
no cambiaría nada, pero podría hacerlo si desea ejercitar algo de lógica en el contenido de la respuesta (como un status.html).--head
siempre regresaba405
. Tuve que quitarlo para que funcionaraQuería limitar el número máximo de intentos. Basado en la respuesta aceptada de Thomas, hice esto:
fuente
--max-time 5
si por alguna razón se agota el tiempo de espera del enlace solicitadohttping es bueno para esto. sencillo, limpio, tranquilo.
while / until etc es una preferencia personal.
fuente
for i in
seq 60; do httping -qc1 http://myhost:myport && echo && break sleep 5 echo -n ${i}.. done
El uso de comillas invertidas
` `
está desactualizado . Utilice en su$( )
lugar:fuente
Interesante rompecabezas. Si no tiene acceso o api asincrónica con su cliente, puede intentar grepping sus sockets tcp de esta manera:
Pero esa es una espera ocupada con intervalos de 1 segundo. Probablemente quieras más resolución que esa. También esto es global. Si se establece otra conexión con ese servidor, sus resultados no son válidos.
fuente
Si necesita verificar si el servidor está disponible, la causa se está reiniciando o algo más, puede intentar hacer un wget al servidor y analizar la respuesta o el error, si obtiene un 200 o incluso un 404, el servidor está activo, usted podría cambiar el tiempo de espera de wget con --timeout = segundos, podría establecer el tiempo de espera en 10 segundos y hacer un bucle hasta que el grep sobre la respuesta tenga un resultado.
No sé si esto es lo que está buscando o realmente necesita el código bash.
fuente