Разорвать петлю в баш - PullRequest
0 голосов
/ 10 июля 2019

Я хотел бы проверить, стал ли кластер БД в AWS доступным после восстановления, и продолжить с остальной частью сценария: Итак, это скрипт Bash для проверки:

echo "Checking if $TARGET_CLUSTER_ID-test reached Available state"
while [ "${cluster_available}" != "available" ]
do
    echo "Waiting for $TARGET_CLUSTER_ID-test to enter Available state"
    aws rds describe-db-clusters --db-cluster-identifier $TARGET_CLUSTER_ID-test --query 'DBClusters[0].[Status]' --output text
    cluster_available="$?"
    CLUSTER_STATUS=$(aws rds describe-db-clusters --db-cluster-identifier $TARGET_CLUSTER_ID-test --query 'DBClusters[0].[Status]' --output text)
    echo "$TARGET_CLUSTER_ID-test instance state is: ${CLUSTER_STATUS}"
done

К сожалению, это не останавливается, когда кластер доступен. Вместо этого он продолжает заполнять терминал:

cluster-name instance state is: 
Waiting for cluster-name-test to enter Available state
available
cluster-name-test instance state is: 
Waiting for cluster-name-test to enter Available state
available

Что я здесь не так делаю?

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Вы устанавливаете cluster_available на число (код выхода aws), но проверяете его на соответствие строке available .Конечно, это всегда будет неравным.

Я не знаю, как есть доступность сигналов aws, но, вероятно, было бы лучше проверить $CLUSTER_STATUS.

Кроме того, это не делаетсмысл выполнять aws rds describe-db-clusters дважды за одну итерацию цикла.

1 голос
/ 10 июля 2019

Это всегда хорошая практика, чтобы запускать bash-скрипт в режиме отладки, где кто-то хочет проверить равенство строк и поместить некоторое время в цикл while, выполняя удаленные вызовы. Вот как я изменил ваш сценарий и смог проверить статус RDS.

#!/bin/bash
# set -x
echo "Checking if $TARGET_CLUSTER_ID-test reached Available state"
time=0
CLUSTER="adiltest-ejabberd-db"
while [ "${cluster_available}" != "available" ]
do
    echo "checking RDS availiblity"
    status=$(aws rds describe-db-clusters --db-cluster-identifier "${CLUSTER}" --query 'DBClusters[0].[Status]' --output text)
    if [ $status == "available" ];then 
    echo "RDS is availble"
    cluster_available="available"
    else
    echo "Waiting for $CLUSTER to enter Available state"
    sleep=2
    echo $time  "Seconds Elapsed"
    time=$((time + 2))
    fi
done

Вот вывод

enter image description here

обновление: Добавление прошедшего времени

enter image description here

...