Comment savoir si une machine virtuelle fonctionne depuis la ligne de commande?

25

Comment savoir à partir de la ligne de commande si une machine virtuelle spécifique est opérationnelle à partir de la ligne de commande?

BenAlabaster
la source
4
vboxmanage list runningvms
slm

Réponses:

17
vboxmanage list vms

Dos not (more?) Indique si la VM fonctionne ou non. Il répertorie également ceux qui ne sont pas en cours d'exécution.

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

Will renvoie 1 s'il est en cours d'exécution ou 0 sinon.

Constantin Guay
la source
2
Aussi,if ! VBoxManage showvminfo VMNAME --machinereadable | egrep '^VMState="poweroff"$' > /dev/null; then ...
x-yuri
sur l'utilisation de Windowsvboxmanage showvminfo "vmname or GUID" | findstr /c:"running (since"
phuclv
3
vboxmanage list runningvms
slm
9

Si vous voulez une liste de toutes les machines virtuelles pour voir si elles sont en cours d'exécution ou non, utilisez cette commande:

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

Cela montrera le nom des machines virtuelles sur une ligne et son état sur la ligne suivante, comme dans

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
la source
La sortie de ceci inclut des informations sur tous les dossiers partagés que vous pourriez avoir configurés. Pipe à un autre grep pour le retirer:... | grep -v -e 'Host path:'
Doug Thompson
Cela montre également les machines en pause, "list runningvms" pense que les machines en pause fonctionnent, ce qui peut être un peu déroutant ...
Samuel Åslund
5

Cette commande affiche la liste des vms en cours d'exécution (testée sur Virtualbox 5.1)

VBoxManage list runningvms

Pour savoir si un vm est en cours d'exécution, cette commande doit faire le travail (retourner 1 si elle est en cours d'exécution, 0 sinon):

VBoxManage list runningvms | sed -r 's/^"(.*)".*$/\1/' | grep 'VM Name' | wc -l
Denis R.
la source
Une machine en pause apparaît comme fonctionnant avec "list runningvms" cela peut être assez déroutant lors du dépannage!
Samuel Åslund
1

Je crois que vous pouvez obtenir ces informations en utilisant VBoxManage (interface de ligne de commande vers VirtualBox).

Vous pouvez utiliser la commande showvminfo pour afficher des informations sur une machine virtuelle particulière.

Il s'agit des mêmes informations que la liste VBoxManage que vms afficherait pour toutes les machines virtuelles.

stderr
la source
1

La combinaison VBoxManage list runningvmsavec grep seul sans autre chose donnera non seulement une sortie console, mais fournira également le code de retour requis pour les besoins de script shell. La grepcommande nécessitera le guillemet double exact pour la machine virtuelle dans le cas où un nom vm est fourni: exemple:

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

Pour une course

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

Dans l'autre réponse, où a sedété utilisé pour éliminer les guillemets doubles, ou si la grep a été effectuée sans les guillemets doubles, les faux positifs seront retournés. Manifestation:

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

root @ yourshell # vboxmanage list vms

Consultez également ce document.

Scandaliste
la source
Cette réponse est fausse. Conformément à virtualbox.org/manual/ch08.html , vous pouvez obtenir les vms enregistrés , mais l'OP a besoin des vms qui sont en cours d'exécution.
Mario S