web-dev-qa-db-ja.com

Virtualboxを待機するBashスクリプトVMシャットダウン?

Virtualboxには、実行中のvmにコマンドを発行する機能があります。

vboxmanage controlvm NameOfRunningVM acpipowerbutton

ただし、このコマンドはすぐに返されるため、私の状況では正常にシャットダウンされません。

状況:これを/etc/init.dスクリプトで使用する予定です。これにより、実行中のすべてのVMを正常にシャットダウンできます。現在、vboxmanage controlvm NameOfRunningVM acpipowerbuttonコマンドを発行すると、コマンドがVMのシャットダウンを待機しないため、シャットダウンが遮断されます。

Virtualboxマシンの名前と秒単位のタイムアウトを入力として受け取り、VMが「電源オフ」状態に戻るのを待つ、またはタイムアウトが発生するBashスクリプトが必要ですか?

これを行うための最善の方法がわかりません。


次のコマンドでVMの状態を確認することを考えていました:

[user@machine ~]$ vboxmanage list runningvms
"VirtualMachineName" {65c93f1f-4508-4119-b07d-ce9e89b23b8e}

Bashスクリプトは、実行中のVMのリストをポーリングしている可能性があります。マシン名がリストされなくなると、VMは終了したと見なされます。

6

ポーリングを使用すると、次のように実行できます。

#!/bin/bash
MACHINE=$1
echo "Waiting for machine $MACHINE to poweroff..."

until $(VBoxManage showvminfo --machinereadable $MACHINE | grep -q ^VMState=.poweroff.)
do
  sleep 1
done
13
larstobi