Autor Tópico: [Resolvido] Bash não sai do loop  (Lida 7529 vezes)

Offline bred81

  • Usuário Ubuntu
  • *
  • Mensagens: 971
  • HAN?!
    • Ver perfil
[Resolvido] Bash não sai do loop
« Online: 16 de Outubro de 2015, 11:36 »
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:
Código: [Selecionar]
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
« Última modificação: 06 de Janeiro de 2016, 13:49 por bred81 »
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

Offline antony-ag

  • Usuário Ubuntu
  • *
  • Mensagens: 104
    • Ver perfil
Re:Bash não sai do loop
« Resposta #1 Online: 16 de Outubro de 2015, 13:15 »
Tente usar o until no lugar do while e inverta a condicional desse loop.  Veja se funciona..

Offline bred81

  • Usuário Ubuntu
  • *
  • Mensagens: 971
  • HAN?!
    • Ver perfil
Re:Bash não sai do loop
« Resposta #2 Online: 16 de Outubro de 2015, 15:25 »
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...

Offline bred81

  • Usuário Ubuntu
  • *
  • Mensagens: 971
  • HAN?!
    • Ver perfil
Re:Bash não sai do loop
« Resposta #3 Online: 16 de Outubro de 2015, 15:44 »
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...

Código: [Selecionar]
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...

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re:Bash não sai do loop
« Resposta #4 Online: 16 de Outubro de 2015, 16:21 »
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.

Código: [Selecionar]
...
[ "${health}" != \"green\" ]
...

Offline bred81

  • Usuário Ubuntu
  • *
  • Mensagens: 971
  • HAN?!
    • Ver perfil
Re:Bash não sai do loop
« Resposta #5 Online: 19 de Outubro de 2015, 07:04 »
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...

Offline antony-ag

  • Usuário Ubuntu
  • *
  • Mensagens: 104
    • Ver perfil
Re:Bash não sai do loop
« Resposta #6 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

Offline bred81

  • Usuário Ubuntu
  • *
  • Mensagens: 971
  • HAN?!
    • Ver perfil
Re:Bash não sai do loop
« Resposta #7 Online: 06 de Janeiro de 2016, 13:48 »
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...