1

我正在编写我的亚马逊部署脚本,但我还没有设法自动化其中的一个步骤。

该步骤介于设置 RAID(通过 mdadm)然后在新的挂载目录上安装我的数据库(mongo)之间。这是因为在安装 mongo 之前,我必须在后台等待 mdadm 完成。我知道 mdadm 何时通过运行以下命令完成:

sudo mdadm --detail /dev/md0

当 mdadm 仍在进行中时,此命令将生成进度指示器,例如:

 Rebuild Status : 2% complete

当 mdadm 完成时,此状态将消失。

有没有人有一个干净的解决方案可以判断 mdadm 何时完成,以便脚本可以完全自行运行,然后在 mdadm 完成后继续安装 mongo?

目前,我正在考虑使用 boto 在盒子上放置各种脚本,从 boto 运行脚本,并在脚本解析并读取 mdadm 完成后退出...

非常感谢你的帮助!

4

3 回答 3

4

我在用:

 mdadm --wait /dev/md0

请注意,如果不需要等待,上述命令将返回非零退出状态......您可能需要在脚本中考虑到这一点。

于 2013-01-22T22:13:27.940 回答
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 运行脚本。

于 2012-04-27T10:27:23.390 回答
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...
于 2012-05-23T00:35:27.997 回答