Comment créer une boucle dans bash qui attend la réponse d'un serveur Web?
Il doit imprimer un "." toutes les 10 secondes environ, et attendez 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"; puis echo "L'URL existe: $ url" autre echo "L'URL n'existe pas: $ url" Fi
Réponses:
En combinant la question avec la réponse de Chepner, cela a fonctionné pour moi:
la source
$( )
plutôt.--head
?--head
ne changerait rien, mais vous pourriez le faire si vous voulez exercer une certaine logique sur le contenu de la réponse (comme un status.html).--head
revenait toujours405
. Dû le supprimer pour le faire fonctionnerJe voulais limiter le nombre maximum de tentatives. Sur la base de la réponse acceptée de Thomas, j'ai fait ceci:
la source
--max-time 5
si pour certaines raisons demandées le lienhttping est bien pour cela. simple, propre, calme.
tandis que / jusqu'à ce que etc est une préférence personnelle.
la source
for i in
seq 60; do httping -qc1 http://myhost:myport && echo && break sleep 5 echo -n ${i}.. done
L'utilisation de backticks
` `
est obsolète . Utilisez à la$( )
place:la source
Puzzle intéressant. Si vous n'avez pas d'accès ou d'API asynchrone avec votre client, vous pouvez essayer de grepping vos sockets TCP comme ceci:
Mais c'est une attente chargée avec des intervalles de 1 seconde. Vous voulez probablement plus de résolution que cela. C'est aussi mondial. Si une autre connexion est établie avec ce serveur, vos résultats ne sont pas valides.
la source
si vous avez besoin de vérifier si le serveur est disponible, la cause redémarre ou autre chose, vous pouvez essayer de faire un wget sur le serveur et d'analyser la réponse ou l'erreur, si vous obtenez un 200 ou même un 404, le serveur est en marche, vous pourrait changer le délai d'expiration wget avec --timeout = secondes, vous pouvez définir le délai d'expiration à 10 secondes et faire une boucle jusqu'à ce que le grep sur la réponse ait un résultat.
Je ne sais pas si c'est ce que vous recherchez ou si vous avez vraiment besoin du code bash.
la source