2017-08-29 7 views
0

での再試行は、私は、設定ファイルの束を設定bashスクリプトを持っており、これは私がlocalhost:3001に移動し、UIを使用することができますブロックバッシュ:ループ

sudo stop myapp 
sleep 10 
sudo start myapp 

で終わります。しかし、何らかの理由でアプリが時々dsnt startをソートのループで包み込みたいのですか?これは私がやったことです:アプリが起動している場合

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を返します。それがなければ何も返しません。しかし、私のスクリプトdsntはまったく終了し、単純に10回試行されます。

答えて

2

しかし、私のスクリプトdsntはまったく終了し、単純に10回試行されます。

あなたはelseforループから抜け出す必要があります。awkは、最初のレコードの条件NR==1を持つことができますので、また

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 

headはここでは不要です。

+0

私は、答えが「:」と似ていると答えたときまで壊れました。とにかく、ブレークに追加した後でも、スクリプトは10回の試行すべてで実行されます.... – letsc

+0

オフラインになる前の最後のコメント。条件とチェック値の前に 'declare -p status'を追加してください。 – anubhava

+0

'declare - status =" "' – letsc