Mit Hilfe von Polling könnte dies folgendermaßen erfolgen:
#!/bin/bash MACHINE=$1 echo "Waiting for machine $MACHINE to poweroff..." until $(VBoxManage showvminfo --machinereadable $MACHINE | grep -q ^VMState=.poweroff.) do sleep 1 done
Virtualbox kann einen Befehl an eine laufende VM ausgeben:
vboxmanage controlvm NameOfRunningVM acpipowerbutton
Dieser Befehl wird jedoch sofort zurückgegeben, was zu einem nicht ordnungsgemäßen Herunterfahren meiner Situation führt.
Die Situation: Ich habe vor, dies in einem Skript /etc/init.d zu verwenden. Dies würde ein ordnungsgemäßes Herunterfahren aller laufenden VMs ermöglichen. Wenn ich den vboxmanage controlvm NameOfRunningVM acpipowerbutton
Befehl ausstelle, wird das Herunterfahren derzeit unterbrochen, da der Befehl nicht auf das Herunterfahren der VM wartet.
Ich brauche ein Bash-Skript, das den Namen der Virtualbox-Maschine als Eingabe akzeptiert und ein Timeout in Sekunden wartet, bis die VM in den Zustand "Poweroff" zurückkehrt oder das Timeout auftritt.
Ich bin mir nicht sicher, was der beste Weg ist, dies zu tun.
Ich dachte daran, den Status der VM mit dem folgenden Befehl zu überprüfen:
[user@machine ~]$ vboxmanage list runningvms "VirtualMachineName"
Das Bash-Skript würde möglicherweise eine Liste der laufenden VMs abfragen. Sobald der Computername nicht mehr aufgeführt ist, wird die VM als abgeschlossen betrachtet.
Mit Hilfe von Polling könnte dies folgendermaßen erfolgen:
#!/bin/bash MACHINE=$1 echo "Waiting for machine $MACHINE to poweroff..." until $(VBoxManage showvminfo --machinereadable $MACHINE | grep -q ^VMState=.poweroff.) do sleep 1 done