Como posso saber na linha de comando se uma máquina virtual específica está ativa e em execução na linha de comando?
Como posso saber na linha de comando se uma máquina virtual específica está ativa e em execução na linha de comando?
Respostas:
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.
if ! VBoxManage showvminfo VMNAME --machinereadable | egrep '^VMState="poweroff"$' > /dev/null; then ...
vboxmanage showvminfo "vmname or GUID" | findstr /c:"running (since"
vboxmanage list runningvms
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)
... | grep -v -e 'Host path:'
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
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.
Combinando VBoxManage list runningvms
com 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 grep
comando 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 sed
foi 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
root @ yourshell # vboxmanage list vms
Além disso, consulte este documento.
vboxmanage list runningvms