Wie erstelle ich eine Schleife in Bash, die darauf wartet, dass ein Webserver antwortet?
Es sollte ein "." Warten Sie etwa alle 10 Sekunden, bis der Server zu antworten beginnt.
Update, dieser Code testet, ob ich eine gute Antwort vom Server bekomme.
if curl --output / dev / null --silent --head --fail "$ url"; dann echo "URL existiert: $ url" sonst echo "URL existiert nicht: $ url" fi
Antworten:
Die Frage mit der Antwort von chepner zu kombinieren, funktionierte für mich:
quelle
$( )
stattdessen.--head
?--head
würde nichts ändern, aber Sie könnten es, wenn Sie eine Logik für den Antwortinhalt anwenden möchten (wie eine status.html).--head
immer zurückgegeben wurde405
. Musste es entfernen, damit es funktioniertIch wollte die maximale Anzahl von Versuchen begrenzen. Basierend auf Thomas 'akzeptierter Antwort habe ich Folgendes gemacht:
quelle
--max-time 5
wenn aus bestimmten Gründen Link-Zeitenhttping ist schön dafür. einfach, sauber, ruhig.
während / bis etc ist eine persönliche Präferenz.
quelle
for i in
seq 60; do httping -qc1 http://myhost:myport && echo && break sleep 5 echo -n ${i}.. done
Die Verwendung von Backticks
` `
ist veraltet . Verwenden Sie$( )
stattdessen:quelle
Interessantes Rätsel. Wenn Sie mit Ihrem Client keinen Zugriff oder keine asynchrone API haben, können Sie versuchen, Ihre TCP-Sockets wie folgt zu durchsuchen:
Aber das ist eine anstrengende Wartezeit mit Intervallen von 1 Sekunde. Sie möchten wahrscheinlich mehr Auflösung als das. Auch das ist global. Wenn eine andere Verbindung zu diesem Server hergestellt wird, sind Ihre Ergebnisse ungültig.
quelle
Wenn Sie überprüfen müssen, ob der Server verfügbar ist, die Ursache neu gestartet wird oder etwas anderes, können Sie versuchen, ein Wget zum Server zu erstellen und die Antwort oder den Fehler zu analysieren. Wenn Sie eine 200 oder sogar eine 404 erhalten, ist der Server aktiv könnte das wget-Timeout mit --timeout = Sekunden ändern. Sie könnten das Timeout auf 10 Sekunden setzen und eine Schleife erstellen, bis der Grep über der Antwort ein Ergebnis hat.
Ich weiß nicht, ob dies das ist, wonach Sie suchen oder ob Sie wirklich den Bash-Code benötigen.
quelle