Come posso sapere dalla riga di comando se una specifica macchina virtuale è attiva e in esecuzione dalla riga di comando?
Come posso sapere dalla riga di comando se una specifica macchina virtuale è attiva e in esecuzione dalla riga di comando?
Risposte:
vboxmanage list vms
Dos not (più?) Dice se il VM è in esecuzione o meno. Elenca anche quelli non in esecuzione.
vboxmanage showvminfo "your_vm_name" | grep -c "running (since"
Restituirà 1 se è in esecuzione, o 0 in caso contrario.
if ! VBoxManage showvminfo VMNAME --machinereadable | egrep '^VMState="poweroff"$' > /dev/null; then ...
vboxmanage showvminfo "vmname or GUID" | findstr /c:"running (since"
vboxmanage list runningvms
Se si desidera un elenco di tutte le macchine virtuali per vedere se sono in esecuzione o non utilizzare questo comando:
vboxmanage list vms --long | grep -e "Name:" -e "State:"
Questo mostrerà il nome della VM in una riga e il suo stato nella riga seguente come in
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:'
Questo comando genera l'elenco di vms in esecuzione (testato su Virtualbox 5.1)
VBoxManage list runningvms
Per sapere se un VM è in esecuzione, questo comando dovrebbe fare il lavoro (restituire 1 se in esecuzione, 0 altrimenti):
VBoxManage list runningvms | sed -r 's/^"(.*)".*$/\1/' | grep 'VM Name' | wc -l
Credo che tu possa ottenere queste informazioni usando VBoxManage (interfaccia da riga di comando a VirtualBox).
È possibile utilizzare il comando showvminfo per mostrare informazioni su una determinata macchina virtuale.
Queste sono le stesse informazioni che l'elenco VBoxManage vms mostrerebbe per tutte le macchine virtuali.
La combinazione VBoxManage list runningvms
con grep
solo senza nient'altro non solo darà un output di console, ma fornirà anche il codice di ritorno richiesto per le esigenze di script di shell. Il grep
comando richiederà la virgoletta doppia esatta per la VM nel caso in cui venga fornito un nome VM: esempio:
$ VBoxManage list runningvms |grep '"demo_vm"'
$ echo $?
1
Per uno in esecuzione
$ VBoxManage list runningvms |grep '"demo_vm_on"'
"demo_vm_on" {bbff5c0e-f8d4-4751-8d34-c53c4b191613}
$ echo $?
0
Nell'altra risposta dove è sed
stato usato per eliminare le doppie virgolette o se il grep è stato fatto senza le doppie virgolette, verranno restituiti falsi positivi. Dimostrazione:
$ VBoxManage list runningvms |grep demo_vm
"demo_vm_on" {bbff5c0e-f8d4-4751-8d34-c53c4b191613}
$ echo $?
0
root @ yourshell # vboxmanage list vms
Inoltre, consulta questo documento.
vboxmanage list runningvms