AWS CLIとbashを使用してRDSスナップショットを作成してコピーします。スナップショットの状態が「使用可能」の場合、ループを閉じて追加のコードを実行してスナップショットをコピーする必要があるという条件で実行されるUntilループがあります。ただし、AWS コンソールでステータスを確認できますが、スクリプトは停止し続け、ループは正常に終了しません。ループで私が何を間違っているのでしょうか?
パスワード:
#/bin/bash/
now=$(date '+%Y-%m-%d-%H')
# Creates DB snapshot
echo ---------------------------------------- >> create_snap.txt
echo Start time: >> create_snap.txt
date >> create_snap.txt
aws rds create-db-snapshot --db-instance-identifier db --db-snapshot-identifier test-for-dr-$now
while true; do
STATUS=`aws rds describe-db-snapshots --db-snapshot-identifier test-for-$now | grep "Status" | awk '{print $2}' | sed 's/[",]//g'`
until [ "$STATUS" == "available" ]; do
echo "" &> /dev/null
if [ "$STATUS" == "available" ]; then
break 2
fi
done
done
echo Completion time: >> create_snap.txt
date >> create_snap.txt
echo ---------------------------------------- >> create_snap.txt
echo "" >> create_snap.txt
どんな助けでも大変感謝します!
ベストアンサー1
引き続きさまざまな説明を追加して、次のようにスクリプトを変更する必要があります。
#/bin/bash/
now=$(date '+%Y-%m-%d-%H')
# Creates DB snapshot
echo ---------------------------------------- >> create_snap.txt
echo Start time: >> create_snap.txt
date >> create_snap.txt
aws rds create-db-snapshot --db-instance-identifier db --db-snapshot-identifier test-for-dr-$now
while true; do
STATUS=`aws rds describe-db-snapshots --db-snapshot-identifier test-for-$now | grep "Status" | awk '{print $2}' | sed 's/[",]//g'`
if [ "$STATUS" == "available" ]; then
break
else
echo "" &> /dev/null
fi
sleep 15
done
echo Completion time: >> create_snap.txt
date >> create_snap.txt
echo ---------------------------------------- >> create_snap.txt
echo "" >> create_snap.txt
ご覧のとおり、$STATUS変数が更新されるループがあり、sleep 15
APIを台無しにするのを防ぐ方法があります。