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

242voto

En combinant la question avec la réponse de chepner, cela a fonctionné pour moi :

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

63voto

illagrenan Points 1294

Je voulais limiter le nombre maximum de tentatives. En me basant sur la réponse acceptée de Thomas, j'ai fait ceci :

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

18voto

Bruce Points 98

Le http est bien pour ça. Simple, propre, tranquille.

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

while/until etc. est une préférence personnelle.

11voto

twinlakes Points 6800

L'affiche pose une question spécifique sur l'impression . mais je pense que la plupart des personnes qui viennent ici recherchent la solution ci-dessous, car il s'agit d'une commande unique qui prend en charge les tentatives finies.

curl --head -X GET --retry 5 --retry-connrefused --retry-delay 1 http://myhost:myport

3voto

Serge Stroobandt Points 525

L'utilisation des backticks ` ` est obsolète .

Utilisez $( ) à la place :

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

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