Як я можу дізнатися з командного рядка, якщо певна віртуальна машина працює і працює з командного рядка?
Як я можу дізнатися з командного рядка, якщо певна віртуальна машина працює і працює з командного рядка?
Відповіді:
vboxmanage list vms
Чи не (більше?) Не повідомляє, чи працює він або ні. У цьому списку також не запущені.
vboxmanage showvminfo "your_vm_name" | grep -c "running (since"
Поверне 1, якщо він працює, або 0, якщо ні.
if ! VBoxManage showvminfo VMNAME --machinereadable | egrep '^VMState="poweroff"$' > /dev/null; then ...
vboxmanage showvminfo "vmname or GUID" | findstr /c:"running (since"
vboxmanage list runningvms
Якщо ви хочете, щоб список усіх віртуальних машин переглядав, чи вони запущені чи не використовують цю команду:
vboxmanage list vms --long | grep -e "Name:" -e "State:"
Це покаже ім'я VM в одному рядку та його статус у наступному рядку, наприклад у
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:'
Ця команда виводить список запущених vms (тестований на Virtualbox 5.1)
VBoxManage list runningvms
Щоб знати, чи працює vm, ця команда повинна виконати роботу (повернути 1, якщо працює, 0 інакше):
VBoxManage list runningvms | sed -r 's/^"(.*)".*$/\1/' | grep 'VM Name' | wc -l
Я вважаю, що ви можете отримати цю інформацію за допомогою VBoxManage (інтерфейс командного рядка до VirtualBox).
Ви можете використовувати команду showvminfo для показу інформації про певну віртуальну машину.
Це та сама інформація, яку відображав би список vms VBoxManage для всіх віртуальних машин.
Поєднання VBoxManage list runningvms
з grep
самостійно без нічого іншого не тільки дасть консольний вихід, але й надасть код повернення, необхідний для потреб сценарію оболонки. grep
Команда вимагає точної лапки для віртуальної машини в разі , коли передбачено ім'я віртуальної машини: приклад:
$ VBoxManage list runningvms |grep '"demo_vm"'
$ echo $?
1
Для запущеного
$ VBoxManage list runningvms |grep '"demo_vm_on"'
"demo_vm_on" {bbff5c0e-f8d4-4751-8d34-c53c4b191613}
$ echo $?
0
В іншій відповіді, де sed
було використано для усунення подвійних лапок, або якщо греп був зроблений без подвійних лапок, повертаються помилкові позитиви. Демонстрація:
$ VBoxManage list runningvms |grep demo_vm
"demo_vm_on" {bbff5c0e-f8d4-4751-8d34-c53c4b191613}
$ echo $?
0
root @ tvojehell # vboxmanage list vms
Також дивіться цей документ.
vboxmanage list runningvms