我想检查还原后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
我在这里做错了什么?
答案 0 :(得分:2)
您将cluster_available
设置为数字(aws
的退出代码),但针对字符串 available 进行了测试。当然,这总是不平等的。
我不知道aws如何表明可用性,但是测试$CLUSTER_STATUS
可能是一个更好的主意。
此外,在一次循环迭代中两次执行aws rds describe-db-clusters
也没有意义。
答案 1 :(得分:1)
在调试模式下运行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
这是输出
更新:添加经过的时间