146 votes

Comment créer une boucle en bash qui attend la réponse d'un serveur web ?

Comment créer une boucle en bash qui attend la réponse d'un serveur web ?

Il devrait imprimer un "." toutes les 10 secondes environ, et attendre que le serveur commence à répondre.

Mise à jour, ce code teste si j'obtiens une bonne réponse du serveur.

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

2voto

Manikandan Points 1982

Vous pouvez également combiner les commandes timeout et tcp comme ceci. Le délai d'attente sera de 60 secondes au lieu d'attendre indéfiniment.

timeout 60 bash -c 'until echo > /dev/tcp/myhost/myport; do sleep 5; done'

1voto

Ferran Maylinch Points 394
printf "Waiting for $HOST:$PORT"
until nc -z $HOST $PORT 2>/dev/null; do
    printf '.'
    sleep 10
done
echo "up!"

J'ai pris l'idée d'ici : https://stackoverflow.com/a/34358304/1121497

0voto

BoeroBoy Points 289

Casse-tête intéressant. Si vous n'avez pas d'accès ou d'api asynchrone avec votre client, vous pouvez essayer de parcourir vos sockets tcp comme ceci :

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

Mais c'est une attente occupée avec des intervalles de 1 seconde. Vous voulez probablement plus de résolution que cela. En outre, il s'agit d'un système global. Si une autre connexion est établie avec ce serveur, vos résultats ne sont pas valables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X