Para um controle com script de máquinas Virtual Box, podemos fazer uso do VBoxManage comandos:
-
Listar máquinas em execução (retorna o nome e o UUID):
VBoxManage list runningvms
-
Pare de executar as VMs "hibernando" as mesmas (recomendadas para evitar a perda de dados)
VBoxManage controlvm <name|uuid> savestate
-
Poweroff executando VMs (não recomendado porque podemos perder dados no convidado)
VBoxManage controlvm <name|uuid> poweroff
-
Use ACPI em um sistema operacional convidado compatível com ACPI (preferível a
poweroff
para um desligamento normal dos convidados)VBoxManage controlvm <name|uuid> acpipowerbutton
Veja também: Como encerrar com segurança Convidado OS no VirtualBox usando a linha de comando
Atualização do OP
Com base nesta resposta correta selecionada abaixo, adicionei este script " $HOME/bin/stop-vagrant.sh
". Então agora eu tenho algo que pode seguramente iniciar uma parada de todas as VMs vagabundas que eu poderia ter ligado ainda em uma sessão.
vboxmanage list runningvms | sed -r 's/.*\{(.*)\}//' | xargs -L1 -I {} VBoxManage controlvm {} savestate
Comando explicado:
vboxmanage list runningvms |
- obtém uma lista de todos os vms em execução no VirtualBox
sed -r 's/.*\{(.*)\}//' |
- retira a string para o número de identificação
xargs -L1 -I {} VBoxManage controlvm {} savestate
- executa o comando salvar estado em cada caixa aberta.
Em xargs
-
-L1
- pegue uma linha de cada vez -
-I {}
- usa {} como espaço reservado para o próximo comando