루프가 닫히지 않을 때까지

루프가 닫히지 않을 때까지

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

관련 정보