3 votes

Comment démarrer Safari sur une page du navigateur uniquement lorsque l'erreur 502 cesse de se produire ?

J'ai une situation où, si je pousse une mise à jour vers une instance sur le web, la compilation prendra 3 à 5 minutes, puis lorsque la compilation sera terminée, l'instance lancera Erreur 502 pendant quelques minutes avant qu'il ne recommence à fonctionner.

Je cherche une solution dans laquelle l'instance (une URL de serveur) sera interrogée toutes les 5 secondes environ, et lorsqu'elle cessera de répondre 502 Safari démarre.

Une idée de comment je pourrais faire ça ? Jusqu'à présent, sur le terminal, je peux exécuter ceci :

curl -I http://url 2>/dev/null | head -n 1 | cut -d$' ' -f2

et cela donnera la réponse du port HTTP ou autre, mais je ne suis pas assez calé pour "faire cela toutes les 5 secondes" ou pour définir une boucle "Si (réponse résultante) est X, continuer à répéter, mais si (réponse résultante) est Y, alors lancer Safari avec une URL".

Des idées ?

3voto

Douglas Points 10417

Un script "rapide et sale" pour accomplir ce que vous cherchez à faire pourrait être écrit comme suit :

#!/bin/bash

url = "http://url"
code=`curl -I $url 2>/dev/null | head -n 1 | cut -d$' ' -f2`

while [ "$code" == 502 ]
do
  sleep 5
  echo trying again
  code=`curl -I $url 2>/dev/null | head -n 1 | cut -d$' ' -f2`
done

open -a Safari $url

Fondamentalement, ce qu'il fait est de capturer la valeur que vous produisez dans une variable appelée code . Il évalue ensuite cette variable dans une boucle While/Do toutes les 5 secondes jusqu'à ce que la valeur change. Une fois que cela se produit, il quitte la boucle et lance une instance de Safari pointant vers l'URL.

0 votes

Merci d'avoir résolu la majeure partie du problème - c'est assez bon pour m'aider à l'avenir. Bien sûr, il n'y a pas vraiment de moyen de faire "bien, il se charge bien mais avec la version précédente pendant les 3 prochaines minutes, alors continuez à envoyer des ping, ok, maintenant il tire 502, ok, continuez à envoyer des ping et maintenant il se charge à nouveau, alors démarrez safari avec l'url". Une idée sur ce sujet @Allan ?

1 votes

Si c'est censé fonctionner en permanence, vous devez l'exécuter en arrière-plan et le déshonorer. Exécutez-le en lançant la commande : script.sh & disown (script.sh étant le nom du script). Vous devrez modifier la boucle pour qu'elle ne se termine jamais mais ajouter une vérification (if/then) pour un code de 200 qui appellera Safari. Si vous voulez qu'il ne s'exécute que toutes les 30 minutes par exemple (probablement mieux), ajoutez-le à cron (Linux/BSD/Unix) ou launchd sur le Mac.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X