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를 망치는 것을 방지할 수 있는 방법이 있습니다.