ループが閉じないまで

ループが閉じないまで

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を台無しにするのを防ぐ方法があります。

おすすめ記事