2013-12-12 5 views
1

У меня есть код в скрипт следующим образом:код идет в бесконечном цикле

# Setup the command. 
command=`ec2-describe-snapshots | grep pending | wc -l` 

# Check if we have any pending snapshots at all. 
if [ $command == "0" ] 
then 
     echo "No snapshots are pending." 
     ec2-describe-snapshots 
else 
     # Wait for the snapshot to finish. 
     while [ $command != "0" ] 
     do 
       # Communicate that we're waiting. 
       echo "There are $command snapshots waiting for completion." 
       sleep 5 

       # Re run the command. 
       command=`ec2-describe-snapshots | grep pending | wc -l` 
     done 

     # Snapshot has finished. 
    echo -e "\n" 
     echo "Snapshots are finished." 
fi 

Этот код иногда работает нормально, иногда DonT работает отлично. Он переходит в бесконечный цикл. Я хочу сделать что-то подобное, я хочу проверить вывод ec2-describe-snapshot, что если snaphost находятся в состоянии ожидания. если да, то он должен дождаться завершения всех снимков.

Выход EC2-описывают-снимки является

SNAPSHOT snap-104ef62e vol-a8 completed 2013-12-12T05:38:28+0000 100% 109030037527 20 2013-12-12: Daily Backup for i-3ed09 (VolID:vol-aecbbcf8 InstID:i-3e2bfd09) 
SNAPSHOT snap-1c4ef622 vol-f0 pending 2013-12-12T05:38:27+0000 100% 109030037527 10 2013-12-12: Daily Backup for i-260 (VolID:vol-f66a0 InstID:i-2601) 
+0

Подсказка, возможно, используйте 'logger' внутри вашего скрипта. –

+0

что это? Я ничего не получаю – user3086014

+0

Ваша команда 'echo' показывает, что есть нулевое количество моментальных снимков, ожидающих завершения? Или вы видите «Есть 0 моментальных снимков, ожидающих завершения», и он все еще петли? –

ответ

3

программы будет цикл навсегда, если существует, по крайней мере один отложенный снимок. Возможно, это будет полезно для печати, что те ожидающие снимки, изменив сценарий, как это:

echo "There are $command snapshots waiting for completion." 
ec2-describe-snapshots | grep pending 

Но, конечно, что не бывает на самом деле бесконечно. Вы, наверное, просто должны ждать. Когда больше не будет ожидающих моментальных снимков, цикл остановится. В самом деле.

Btw вот немного улучшенная версия вашего скрипта. Это эквивалентно вашему, только синтаксис улучшен, чтобы удалить ненужные вещи и заменить старые стили, используя современные методы:

command=$(ec2-describe-snapshots | grep pending | wc -l) 

# Check if we have any pending snapshots at all. 
if [ $command = 0 ] 
then 
     echo "No snapshots are pending." 
     ec2-describe-snapshots 
else 
     # Wait for the snapshot to finish. 
     while [ $command != 0 ] 
     do 
       # Communicate that we're waiting. 
       echo "There are $command snapshots waiting for completion." 
       ec2-describe-snapshots | grep pending 
       sleep 5 

       # Re run the command. 
       command=$(ec2-describe-snapshots | grep pending | wc -l) 
     done 

     # Snapshot has finished. 
     echo 
     echo "Snapshots are finished." 
fi 
+0

см. Мой обновленный код в вопросе. вы думаете, что это сработает? – user3086014

+0

вы даете мне точный ответ, который я написал – user3086014

+0

Что? Не за что. Вы читаете это правильно? – janos

Смежные вопросы