NSClient++: запущенная виртуальная машина VirtualBox отображается как poweroff
Я должен контролировать виртуальную машину, запущенную в среде Windows Server 2008, используя VirtualBox. Я использую Nagios для мониторинга. Этот процесс выполняется в среде Ubuntu Server.
Связь между Nagios и машиной Windows основана на NRPE (Nagios Remote Protocol Executor). Я установил NSClient++ на компьютере Windows и написал скрипт, который запускает команду VBoxManage для проверки состояния виртуальной машины.
Вот сценарий:
@ECHO off
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" showvminfo "win732" --machinereadable > C:\Users\root\etat_machine.txt
FOR /F "tokens=* delims= " %%a in ('FINDSTR /I "win732" C:\Users\root\etat_machine.txt ^| FIND /C /I "win732"') do ( set res=%%a )
IF %res% == 1 goto ok
IF %res% == 0 goto err
:err
ECHO WARNING: VM DOWN
EXIT /B 1
:ok
ECHO OK: VM UP
EXIT /B 0
Если я запускаю этот сценарий непосредственно на сервере Windows (./check_vm.bat), файл etat_machine.txt содержит VMState="running", и сценарий возвращает VM UP. Если сценарий выполняется через NRPE, он содержит VMState="poweroff", хотя виртуальная машина работает.
Есть ли у кого-нибудь объяснение? Я проверил пользователя, выполняющего скрипт, и в обоих случаях это root. Так что я не думаю, что это проблема с разрешением... Или, может быть, разрешение на службу NSClient тогда...
2 ответа
Я на самом деле думаю, что это связано с привилегиями (или, по крайней мере, как работает Виртуальная коробка). Я сделал быстрый тест здесь (так как я широко использую виртуальную коробку для тестирования nsclient++).
Запуск данного виртуального ящика как "я" (привилегированный пользователь). Затем выполните следующую команду: VBoxManage.exe showvminfo 610c457f-52e2-4c83-9e0c-e3ef13a8b152 (где GUID является одной из моих виртуальных машин).
Как "я" я получаю:
State: running (since 2011-08-30T07:12:01.597000000)
Как я с консоли администратора я получаю (т.е.. Cmd как администратор):
State: powered off (since 2011-08-30T03:50:32.000000000)
В качестве пользовательского теста я получаю:
VBoxManage.exe: error: Could not find a registered machine named '610c457f-52e2-4c83-9e0c-e3ef13a8b152'
Как пользовательский тест как администратор я получаю:
VBoxManage.exe: error: Could not find a registered machine named '610c457f-52e2-4c83-9e0c-e3ef13a8b152'
Таким образом, похоже, что состояние нельзя переносить между разными пользователями / уровнями. Но опять же, это просто я играю вокруг, поэтому я не знаю...
NSClient++ работал как системная учетная запись. Используйте PsTools для запуска файла bat (или VBoxManage.exe) в качестве этой учетной записи, чтобы увидеть, что происходит.