[Resolvido] Bash não sai do loop

Iniciado por bred81, 16 de Outubro de 2015, 11:36

tópico anterior - próximo tópico

bred81

Pessoal,

bom dia! Tempo enorme que não venho aqui, tanto que a última vez que utilizei o fórum ainda era o desgin antigo.
Bom, meu caso é o seguinte:
Eu tenho um script que precisa esperar o nosso cluster de Elasticsearch ficar green para continuar fazer uma tarefa que deixa o cluster red.
O meu loop está a seguir:

health=$(curl -s ${elasticsearch_url_172}/_cluster/health | jq .status)
while [ "${health}" != "green" ]; do
health=$(curl -s ${elasticsearch_url_172}/_cluster/health | jq .status)
echo "${health}"
if [ "${health}" != "green" ]; then
echo "[$(date +"%F %T")][$(pretty ${count})] Cluster em ${health}. Esperando ficar green."
echo "[$(date +"%F %T")][$(pretty ${count})] Retentando em 60 segundos..."
fi

sleep 60
done


O negócio que ocorre é que a variável "health" fica green, mas ele continua dentro deste loop.
Por acaso a instrução que altera a variável deve ser a última coisa no loop?
Estaria falando disto:
Citar
   health=$(curl -s ${elasticsearch_url_172}/_cluster/health | jq .status)
   while [ "${health}" != "green" ]; do
      health=$(curl -s ${elasticsearch_url_172}/_cluster/health | jq .status)
      echo "${health}"
      if [ "${health}" != "green" ]; then
         echo "[$(date +"%F %T")][$(pretty ${count})] Cluster em ${health}. Esperando ficar green."
         echo "[$(date +"%F %T")][$(pretty ${count})] Retentando em 60 segundos..."
      fi

      sleep 60
      health=$(curl -s ${elasticsearch_url_172}/_cluster/health | jq .status)
   done
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

antony-ag

Tente usar o until no lugar do while e inverta a condicional desse loop.  Veja se funciona..

bred81

Alterar o o "health" pro final do loop (while) não adiantou.
Eis o log:

Citar
$ ./restoreS3toES-1.7.2.sh "2015.10.07"
Arquivo de indices valido.
Nao faremos download
[2015-10-16 15:14:07][010] Restore do índice checkout-2015.10.07
[2015-10-16 15:14:07][010] Cluster em "red". Esperando ficar green.
[2015-10-16 15:14:07][010] Retentando em 60 segundos...
[2015-10-16 15:15:07][010] Cluster em "red". Esperando ficar green.
[2015-10-16 15:15:07][010] Retentando em 60 segundos...
[2015-10-16 15:16:07][010] Cluster em "red". Esperando ficar green.
[2015-10-16 15:16:07][010] Retentando em 60 segundos...
[2015-10-16 15:17:07][010] Cluster em "red". Esperando ficar green.
[2015-10-16 15:17:07][010] Retentando em 60 segundos...
[2015-10-16 15:18:07][010] Cluster em "red". Esperando ficar green.
[2015-10-16 15:18:07][010] Retentando em 60 segundos...
[2015-10-16 15:19:08][010] Cluster em "red". Esperando ficar green.
[2015-10-16 15:19:08][010] Retentando em 60 segundos...
[2015-10-16 15:20:09][010] Cluster em "red". Esperando ficar green.
[2015-10-16 15:20:09][010] Retentando em 60 segundos...
[2015-10-16 15:21:09][010] Cluster em "yellow". Esperando ficar green.
[2015-10-16 15:21:09][010] Retentando em 60 segundos...
[2015-10-16 15:22:09][010] Cluster em "yellow". Esperando ficar green.
[2015-10-16 15:22:09][010] Retentando em 60 segundos...
[2015-10-16 15:23:09][010] Cluster em "green". Esperando ficar green.
[2015-10-16 15:23:09][010] Retentando em 60 segundos...
[2015-10-16 15:24:09][010] Cluster em "green". Esperando ficar green.
[2015-10-16 15:24:09][010] Retentando em 60 segundos...
Citar

Vou tentar com o until
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

bred81

Com until também não funcionou.
Citar
$ ./restoreS3toES-1.7.2.sh "2015.10.07"
Arquivo de indices valido.
Nao faremos download
[2015-10-16 15:36:16][013] Restore do índice recommendation-2015.10.07
[2015-10-16 15:36:16][013] Cluster em "red". Esperando ficar green.
[2015-10-16 15:36:16][013] Retentando em 60 segundos...
[2015-10-16 15:37:16][013] Cluster em "red". Esperando ficar green.
[2015-10-16 15:37:16][013] Retentando em 60 segundos...
[2015-10-16 15:38:16][013] Cluster em "red". Esperando ficar green.
[2015-10-16 15:38:16][013] Retentando em 60 segundos...
[2015-10-16 15:39:16][013] Cluster em "red". Esperando ficar green.
[2015-10-16 15:39:16][013] Retentando em 60 segundos...
[2015-10-16 15:40:16][013] Cluster em "yellow". Esperando ficar green.
[2015-10-16 15:40:16][013] Retentando em 60 segundos...
[2015-10-16 15:41:17][013] Cluster em "yellow". Esperando ficar green.
[2015-10-16 15:41:17][013] Retentando em 60 segundos...
[2015-10-16 15:42:17][013] Cluster em "green". Esperando ficar green.
[2015-10-16 15:42:17][013] Retentando em 60 segundos...
[2015-10-16 15:43:17][013] Cluster em "green". Esperando ficar green.
[2015-10-16 15:43:17][013] Retentando em 60 segundos...


health=$(curl -s ${elasticsearch_url_172}/_cluster/health | jq .status)
until [ "${health}" == "green" ]; do
if [ "${health}" != "green" ]; then
echo "[$(date +"%F %T")][$(pretty ${count})] Cluster em ${health}. Esperando ficar green."
echo "[$(date +"%F %T")][$(pretty ${count})] Retentando em 60 segundos..."
fi

sleep 60
health=$(curl -s ${elasticsearch_url_172}/_cluster/health | jq .status)
done
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

irtigor

Pela saída $(curl -s ${elasticsearch_url_172}/_cluster/health | jq .status) retorna a cor entre aspas, então ou você remove as aspas ou compara com a cor entre aspas.


...
[ "${health}" != \"green\" ]
...

bred81

Vim aqui responder exatamente isto. A saida é /"green/" e não "green".

Muito obrigado
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

antony-ag

Opa.... Estamos à disposição...

Não esqueça de editar o título do seu tópico para resolvido...  :D

bred81

Citação de: antony-ag online 19 de Outubro de 2015, 07:50
Opa.... Estamos à disposição...

Não esqueça de editar o título do seu tópico para resolvido...  :D

Achei que o símbolo de "resolvido" já bastava. Vou editar.
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...