1

Amazon デプロイのスクリプトを作成していますが、そのステップを自動化できていません。

ステップは、(mdadm を介して) RAID をセットアップしてから、新しいマウントされたディレクトリに私のデータベース (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 に答える