Используя опрос, это можно сделать так:
#!/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 имеет возможность выдать команду работающему vm:
vboxmanage controlvm NameOfRunningVM acpipowerbutton
Однако эта команда немедленно возвращается, что приводит к неосторожному отключению в моей ситуации.
Ситуация: я планирую использовать это в скрипте /etc/init.d. Это позволило бы корректно завершить работу всех работающих виртуальных машин. В настоящее время, когда я запускаю vboxmanage controlvm NameOfRunningVM acpipowerbutton
команду, выключение завершается, потому что команда не ожидает выключения виртуальной машины.
Мне нужен сценарий Bash, который принимает в качестве входных данных имя компьютера Virtualbox и время ожидания в секундах, а затем ожидает, когда виртуальная машина вернется в состояние «выключения», или время ожидания истекло?
Я не уверен, что это лучший способ сделать это.
Я думал о проверке состояния виртуальной машины с помощью следующей команды:
[user@machine ~]$ vboxmanage list runningvms "VirtualMachineName"
Сценарий bash, возможно, будет опрашивать список работающих виртуальных машин. Как только имя машины перестанет быть в списке, виртуальная машина будет считаться завершенной.
Используя опрос, это можно сделать так:
#!/bin/bash MACHINE=$1 echo "Waiting for machine $MACHINE to poweroff..." until $(VBoxManage showvminfo --machinereadable $MACHINE | grep -q ^VMState=.poweroff.) do sleep 1 done