Como posso saber se uma máquina virtual sai da linha de comando?

25

Como posso saber na linha de comando se uma máquina virtual específica está ativa e em execução na linha de comando?

BenAlabaster
fonte
4
vboxmanage list runningvms
SLM

Respostas:

17
vboxmanage list vms

O Dos not (anymore?) Informa se o vm está rodando ou não. Ele também lista os que não estão em execução.

vboxmanage showvminfo "your_vm_name" | grep -c "running (since"

Will retorna 1 se estiver em execução ou 0 se não.

Constantin Guay
fonte
2
Além disso,if ! VBoxManage showvminfo VMNAME --machinereadable | egrep '^VMState="poweroff"$' > /dev/null; then ...
x-yuri
no uso do Windowsvboxmanage showvminfo "vmname or GUID" | findstr /c:"running (since"
phuclv 11/11/16
3
vboxmanage list runningvms
SLM
9

Se você deseja que uma lista de todas as VMs veja se elas estão em execução ou não, use este comando:

vboxmanage list vms --long | grep -e "Name:" -e "State:"

Isso mostrará o nome das VMs em uma linha e seu status na linha a seguir, como em

Name:            windows10pro
State:           running (since 2017-06-09T09:16:46.593000000)
Name:            ubuntu16LTS
State:           powered off (since 2017-02-09T19:11:33.000000000)
Name:            zammad
State:           running (since 2017-06-09T09:08:13.871000000)
Jörn
fonte
A saída disso inclui informações sobre quaisquer pastas compartilhadas que você possa ter configurado. Tubo para outro grep para removê-lo:... | grep -v -e 'Host path:'
Doug Thompson
Isso também mostra as máquinas PAUSADAS, "list runningvms" acha que as máquinas em pausa estão em execução, o que pode ser um pouco confuso ...
Samuel Åslund
5

Este comando gera a lista de vms em execução (testado no Virtualbox 5.1)

VBoxManage list runningvms

Para saber se uma vm está em execução, este comando deve fazer o trabalho (retorne 1 se estiver executando, 0 caso contrário):

VBoxManage list runningvms | sed -r 's/^"(.*)".*$/\1/' | grep 'VM Name' | wc -l
Denis R.
fonte
Uma máquina em pausa aparece como sendo executada com "list runningvms", o que pode ser bastante confuso ao solucionar problemas!
Samuel Åslund
1

Eu acredito que você pode obter essas informações usando o VBoxManage (interface de linha de comando para o VirtualBox).

Você pode usar o comando showvminfo para mostrar informações sobre uma máquina virtual específica.

Esta é a mesma informação que a lista VBoxManage mostraria para todas as máquinas virtuais.

stderr
fonte
1

Combinando VBoxManage list runningvmscom grep sozinho , sem qualquer outra coisa, não só dar uma saída de console, mas também irá fornecer o código de retorno exigida para as necessidades de scripts shell. O grepcomando exigirá as aspas duplas exatas para a VM no caso em que um nome de vm é fornecido: exemplo:

$ VBoxManage list runningvms |grep '"demo_vm"'
$ echo $?
1

Para um correndo

$ VBoxManage list runningvms |grep '"demo_vm_on"'
"demo_vm_on" {bbff5c0e-f8d4-4751-8d34-c53c4b191613}
$ echo $?
0

Na outra resposta, onde sedfoi usado para eliminar as aspas duplas, ou se o grep foi feito sem as aspas duplas, retornos falsos positivos. Demonstração:

$ VBoxManage list runningvms |grep demo_vm
"demo_vm_on" {bbff5c0e-f8d4-4751-8d34-c53c4b191613}
$ echo $?
0
metatoaster
fonte
0

root @ yourshell # vboxmanage list vms

Além disso, consulte este documento.

Escandalista
fonte
Esta resposta está errada. De acordo com virtualbox.org/manual/ch08.html , você pode obter os vms registrados , mas o OP precisa dos vms que estão em funcionamento.
Mario S