我正在编写我的亚马逊部署脚本,但我还没有成功实现自动化步骤。
步骤介于设置RAID(通过mdadm),然后在新安装的目录上安装我的db(mongo)。这是因为在安装mongo之前我必须等待mdadm在后台完成。通过运行以下命令,我知道mdadm何时完成:
sudo mdadm --detail /dev/md0
当mdadm仍在进行时,此命令将生成一个进度指示器,例如:
Rebuild Status : 2% complete
当mdadm完成后,此状态将消失。
有没有人有一个干净的解决方案能够告诉mdadm何时完成,以便脚本可以完全独立运行,然后在mdadm完成后继续安装mongo?
目前我正在考虑使用boto在盒子上放置一个类别的脚本,从boto运行脚本,并在解析并读取mdadm完成后让脚本退出...
非常感谢你的帮助!
答案 0 :(得分:2)
我正在使用:
mdadm --wait /dev/md0
请注意,如果上述命令不必等待,则返回非零退出状态...您可能需要在脚本中考虑这一点。
答案 1 :(得分: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运行脚本。
答案 2 :(得分: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...