2017-08-29 3 views
0

Ich habe einen Bash-Skript, das eine Reihe von Konfigurationsdateien einrichtet und mit dem Block EndeBash: Erneute Versuche in einer Schleife

sudo stop myapp 
sleep 10 
sudo start myapp 

Das ist mir zu localhost:3001 und verwenden Sie die Benutzeroberfläche gehen ermöglicht. Aber aus irgendeinem Grund die App manchmal nicht starten möchte ich es in eine Schleife der Art zu wickeln. Das ist, was ich tat:

set -xe 

restart_app() { 
     sudo stop myapp 
     sleep 10 
     sudo start myapp 
} 
restart_app 

for i in {1..10}; 
do 
     status=$(curl -Is localhost:3001 | head -1 | awk '{print $2}') # returns 200 
     if [ -z "$status" ];then 
       restart_myapp 
     else 
       : 
     fi 
done 

status 200 zurück, wenn der App auf. Es gibt nichts zurück, wenn es nicht ist. Aber mein Skript dsnt beendet überhaupt und geht einfach für 10 Versuche weiter.

Antwort

2

Aber mein Skript dsnt beenden überhaupt und geht einfach für 10 Versuche.

Sie müssen in else aus for Schleife brechen:

for i in {1..10}; 
do 
     status=$(curl -Is localhost:3001 | awk 'NR==1{print $2; exit}') 
     if [[ -z "$status" ]];then 
       restart_myapp 
     else 
       break 
     fi 
done 

Auch head unnötig sind hier seit awk Zustand NR==1 für erste Datensatz haben.

+0

Ich hatte Pause, bis ich auf eine SO Antwort stieß, die sagte Pause ist ähnlich wie ':'. Wie auch immer, auch nach dem Hinzufügen in der Pause läuft das Skript für alle 10 Versuche .... – letsc

+0

Letzter Kommentar bevor Sie offline gehen, fügen Sie 'declare -p status' hinzu, bevor Bedingung und Wert überprüfen. – anubhava

+0

'declare - status =" "' – letsc