2012-04-23 49 views
1

我正在編寫我的amazon部署,並且我還沒有設法自動執行一個步驟。Boto - 如何在運行新命令之前等待後臺進程(例如mdadm)完成?

該步驟介於設置RAID(通過mdadm)和安裝我的db(mongo)到新安裝的目錄之間。這是因爲我必須等mdadm在安裝mongo之前在後臺完成。我知道,當mdadm的通過運行以下命令完成:

sudo mdadm --detail /dev/md0 

當mdadm的工作仍在進行中這個命令會產生一個進度指示器例如:

Rebuild Status : 2% complete 

當mdadm的完成這一地位將不復存在。

有沒有人有清楚的解決方案能夠告訴mdadm何時完成,以便腳本可以完全獨立運行,然後在mdadm完成後繼續安裝mongo?

在我考慮將使用博託各種包裝盒上的一個劇本的那一刻,從運行的寶途腳本,讓腳本退出,一旦它解析並讀取mdadm已完成......

謝謝很多爲您的幫助!

+0

該腳本是用哪種語言編寫的?如果是bash腳本,你可以用'cut'來玩。 – gabrielhpugliese 2012-04-24 01:00:44

+0

爲建議歡呼 - 我會看看它 - 我在想bash腳本,所以我不需要事先安裝任何東西! 當我接近它時,會發布腳本;) – 2012-04-25 12:45:11

回答

0

好......所以我說我會後我的解決方案(我完全新編寫的bash腳本,所以如果你有任何建議改善我所有的耳朵!)

#!/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." 

我scp文件到我的實例,然後chmod並通過boto運行腳本。

0

在使用磁盤之前,您不一定需要等待超級塊重新同步,但是在我(和我確信你也是)經驗的情況下,對於ec2實例來說這是一個非常好的主意。

你可以簡單地在bash檢查它while循環

#!/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 2016-04-06 12:14:27

相關問題