2017-03-18 2 views
1

Ich habe ein Skript, das ich ausführen, um 2 Webdienste und eine Front-End-Anwendung bereitzustellen. Das Skript ruft eine Methode auf, die überprüft, ob die 2 Back-End-Dienste ausgeführt werden. Wenn dies der Fall ist, sollte die Bereitstellung als erfolgreich angesehen werden.Curl Retry-Mechanismus

Die 2 Dienste benötigen manchmal länger als das Front-End zum Starten. Momentan setze ich einen Sleep-Call ein, um den Web-Service-Check zu verzögern. Dies gibt ihnen Zeit zu starten.

Ich möchte diesen Schlaf entfernen und in einen Wiederholungsmechanismus hinzufügen, so dass, wenn ein Dienst ausfällt, wiederholen Sie die Überprüfung wiederholt, bis ich eine Antwort erhalte.

Tp prüfen, ob das Gerät läuft, ich benutze curl. Ich habe gelesen, dass Curl einen Wiederholungsmechanismus hat, aber ich habe es nie benutzt.

Haben Sie schon einmal dieses Problem gelöst? Ich möchte die Dinge verstehen, die ich bei der Lösung beachten muss, z. versuche ich es erneut, bis ich einen HTTP 200 von meinem Dienst bekomme?

Wer irgendwelche Vorschläge, wie ich das testen würde? Ich müsste einen Dienst finden, der nicht funktioniert.

EDIT: Ich sehe, dass -retry nur auf transiente Fehler reagiert Transient Fehler bedeutet entweder: ein Timeout, ein FTP 4xx Antwort-Code oder ein HTTP 5xx Antwort-Code '. Mein Dienst kann eine 404 zurückgeben, daher ist die Wiederholung der Locke nicht meine Lösung.

Antwort

0

Die folgende Anweisung wird 5mal oder maximal 40 seonds mit einem Verbindungs-Timeout von 5 Sekunden und keine exponentielle Backoff Politik

curl --connect-timeout 5 \ 
    --max-time 10 \ 
    --retry 5 \ 
    --retry-delay 0 \ 
    --retry-max-time 40 \ 
    'http://your_url' 


--max-time 10  (how long each retry will wait) 
--retry 5   (it will retry 5 times) 
--retry-delay 0 (an exponential backoff algorithm) 
--retry-max-time (total time before it's considered failed) 
+0

Warum schlagen Sie vor dem Ausschalten exponentiellen Backoff wiederholen? – TheCoder

+0

Ich schlage nicht vor, es zu deaktivieren, es ist ein Beispiel für die Verwendung der Standard ist aus, können Sie es auf was auch immer Sie möchten. –

+0

Ich habe Folgendes versucht: (curl -o/dev/null --retry 9 -v -L -w "% {http_code}" $ {url} und die folgende Warnung erhalten: Transient Problem: HTTP error Wird in 1 Sekunden wiederholen 9 Wiederholungen, aber es gab keine Wiederholungen. – TheCoder