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は終了したと見なされます。
ポーリングを使用すると、次のように実行できます。
#!/bin/bash
MACHINE=$1
echo "Waiting for machine $MACHINE to poweroff..."
until $(VBoxManage showvminfo --machinereadable $MACHINE | grep -q ^VMState=.poweroff.)
do
sleep 1
done