2012-04-23 9 views
1

Я занимаюсь созданием моего амазонки, и мне не удалось автоматизировать шаг в нем.Boto - как дождаться завершения фонового процесса (например, mdadm) перед запуском новой команды?

Шаг между настройкой RAID (через mdadm) и установкой моего db (mongo) в новом смонтированном каталоге. Это связано с тем, что мне нужно дождаться завершения mdadm в фоновом режиме перед установкой mongo. Я знаю, когда mdadm закончена, выполнив следующую команду:

sudo mdadm --detail /dev/md0 

Когда mdadm продолжается эта команда будет производить индикатор прогресса, например:

Rebuild Status : 2% complete 

Когда mdadm закончится этот статус уже не будет ,

У кого-нибудь есть чистое решение для того, чтобы сообщить, когда mdadm будет завершен, чтобы скрипт мог работать полностью самостоятельно, а затем продолжить установку mongo после завершения mdadm?

На данный момент я созерцая размещения сценария сортов на коробке с помощью бота, запустив скрипт из Бота, и имеющего выход сценария, когда он разбирает и читает, что mdadm закончена ...

Спасибо много за вашу помощь!

+0

Сценарий написан на каком языке? Если это скрипт bash, вы можете играть с «cut». – gabrielhpugliese

+0

Приветствия за предложение - я посмотрю на него - я думал о сценарии bash, поэтому мне не нужно ничего устанавливать заранее! Отправляю скрипт, когда я его обойду;) –

ответ

0

Ok ... так, как я сказал, что я вывешу мое решение (я совершенно новый для написания скриптов Баша, поэтому если у вас есть какая-либо рекомендация для улучшения я все уши !!!)

#!/bin/bash 

false=1 
true=0 

function drives_are_ready { 
    RAID_INFO=`sudo mdadm --detail /dev/md0` 
    rebuild_status_line_count=`echo "$RAID_INFO" | grep "Rebuild Status" | wc -l` 
    echo `echo "$RAID_INFO" | grep "Rebuild Status"` 
    if ((rebuild_status_line_count == 0)); then 
    return $true 
    else 
    return $false 
    fi 
} 

drives_are_ready 
raid_is_finished=$? 

while ((raid_is_finished == $false)); do 
    echo "RAID isn't finished yet... will check again in 10s" 
    sleep 10s 
    drives_are_ready 
    raid_is_finished=$? 
done 

echo "RAID is done." 

Я просматриваю файл в своем экземпляре, а затем chmod и запускаю скрипт через boto.

0

Вам не обязательно ждать повторной синхронизации суперблока перед использованием дисков, но в моем (и я уверен, что вы тоже) опыт, это очень хорошая идея с экземплярами ec2.

Вы можете просто проверить его в Баш в то время как петля

#!/bin/bash 

... stuff in your script that doesn't require raid ... 

# Pause until mdadm --detail returns nothing 
while [[ `sudo mdadm --detail /dev/md0 | grep 'Rebuild Status'` != '' ]] do 
    sleep 30 
done 

echo "Raid superblock resynchronization complete" 

... stuff in your script that requires raid synchronization to be complete... 
2

Я использую:

mdadm --wait /dev/md0 

Обратите внимание, что данная команда возвращает ненулевое состояние выхода, если он не сделал придется подождать ... вам, возможно, потребуется учитывать это в сценарии.

+0

К сожалению, не существует способа указать тайм-аут. – iElectric