Если вы установите обновление ядра, вам придется перекомпилировать модули ядра Virtual Box, чтобы он работал после загрузки с новым ядром. Вы не могли установить какие-либо новые обновления ядра.
Я не уверен, почему вам придется перезагружать гостевую ОС. Повторная компиляция модулей ядра должна выполняться с главной машиной и не должна изменять состояние гостевой ОС.
Я бы пошел с комбинацией задания cron и использования vboxmanage через скрипты bash.
У меня был бы скрипт bash, который запускал бы виртуальные машины и запускал cron-задание для проверки статус машин.
Скрипт должен выглядеть примерно так:
#!/bin/bash
vboxmanage startvm "Server App VM name"
vboxmanage startvm "Windows XP VM name"
crontab ~/check_vms_and_shutdown_job.txt
Предположим, мы сохраним его как start_vms_and_cronjob.sh. Запомните chmod +x, поэтому он может быть фактически выполнен.
Вы можете задаться вопросом о файле check_vms_and_shutdown_job.txt. Это текстовый файл, содержащий информацию о задании, которое должно выполняться через определенные промежутки времени. В этом примере мы поместили его в домашнюю папку пользователя, и он должен прочитать:
*/5 * * * * ~/check_vms_and_shutdown.sh
Этот файл должен иметь новую строку в конце строки (нажмите Enter перед сохранением;)) Какой этот файл что он описывает задание cron, которое запускается каждые 5 минут, и оно выполняет скрипт bash.
Теперь, что вы можете спросить? Ну, вот и все. Он должен сказать:
#!/bin/bash
if vboxmanage list runningvms | grep "Windows XP VM name"
then
echo "Windows XP still running."
else
echo "Windows XP shut down. Shutting down the rest."
vboxmanage controlvm "Server App VM name" savestate
crontab -r
shutdown -h now
fi
Теперь, что он делает, что он проверит, есть ли виртуальная машина XP. Если это не так, он затем прикажет виртуальной машине приложения сервера сохранить его состояние. После этого cronjob будет удален и система выключится. Не забудьте chmod +x, и здесь мы также разместили файл в домашней папке пользователя.
Для удобства и лучшего использования с этой целью вы также можете запускать виртуальные боксы cron и иметь
Теперь добавьте start_vms_and_cronjob.sh в свои приложения для запуска, и вы должны быть установлены.
Итак, что мы имеем здесь:
Когда система запускается, виртуальные машины запускаются сценарием оболочки, а новое задание cron (запуск сценария оболочки) создается из txt-файла правила работы cron. Через каждые 5 минут задание cron запускает скрипт, который проверяет, продолжает ли виртуальная машина XP, и если она не сохранит другую виртуальную машину, удалите задание cron и выключите систему.Надеюсь, это поможет вам настроить именно то, что вам нужно.
Это шаги для достижения намеченных задач. Гость VM с серверным приложением будет называться «ServerApp», Windows-машина «WindowsXP» ниже. Замените их своими настоящими именами.
Метод ниже предусматривает создание пользовательского Xsession на главной машине. Это имеет то преимущество, что мы можем разделить этот сеанс только на загрузку приложений, которые нам нужны для запуска наших виртуальных машин (для этого нам, вероятно, не нужен полноценный рабочий стол). Кроме того, использование методов ожидания, встроенных в VirtualBox, не потребует дополнительных циклов для вызова состояний VM.
Создайте пользователя для запуска виртуальной машины. Установите гостевые дополнения в гостевой режим. Переключитесь на полноэкранный режим с помощью хоста + F во время работы виртуальной машины. Определите пользовательский сеанс Lubuntu на хосте: создайте файл в /usr/share/xsessions и назовите его, например. WindowsVM.desktop со следующим содержимым:[Desktop Entry]
Name=WindowsXP # or any other sensible name
Comment=Custom Xsession running a VM
Exec=/etc/X11/Xsession
Сделать этот файл исполняемым. Этот сеанс вызовет ~/.xsession при входе в систему. Создайте сценарий запуска исполняемого сеанса с именем ~/.xsession в домашнем ДОМЕ ДОМЕНА пользователя: #! /bin/bash
/usr/bin/lxsession -s Lubuntu LXDE &
VBoxManage startvm "ServerApp" --type headless
VBoxManage startvm "WindowsXP"
VBoxManage guestproperty set RUNNING 1 --flags TRANSIENT
VBoxManage guestproperty wait "WindowsXP" RUNNING
VBoxManage controlvm "SeverApp" savestate
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Выберите пользовательский сеанс в 4. при входе в систему. Сложный бит заключается в том, чтобы получить гостевую собственность RUNNING (или любое другое имя, которое мы выбираем), удаленное с виртуальной машины, поскольку оно не так кратковременно, как предлагают спецификации. К сожалению, он выживет при выключении / отключении виртуальной машины.
Поэтому мы должны добавить следующую команду, используя VBoxcontrol.exe (установленную с гостевыми дополнениями) в гостевую Windows в конце своей процедуры отключения (или из сценария выключения, который мы там помещаем):
VBoxControl.exe guestproperty set RUNNING
Это приведет к завершению состояния wait, чтобы продолжить сохранение «ServerAPP», а затем отключить хост.
Альтернативой этому является запуск приложения Windows в гостевой системе, чтобы дождаться завершения этого приложения до того, как мы завершим работу компьютеров и отключим хост. Затем мы заменили две команды set guestproperty в скрипте строкой, подобной этой:
VBoxManage --nologo guestcontrol "WindowsXP" execute --image "C:\\full\\path\\to\\program.exe" --username <windowsuser> --password <password> --wait-exit --wait-stdout
См. , чтобы запустить приложение Windows для ограничений, а для получения дополнительной информации о том, как установить это для учетной записи без пароля в Windows.
Команды скрипта на шаге 5. объяснили:
/usr/bin/lxsession -s Lubuntu LXDE запускает сеанс Lubuntu (замените любым другим настроенным Xsession, если применимо) VBoxManage startvm "ServerApp --type headless" запускает виртуальную машину, на которой запущено серверное приложение в режиме безглавых (т.е. нет отображения). VBoxManage startvm "WindowsXP" запускает виртуальную машину под управлением Windows (полноэкранный режим или любое другое разрешение, определенное в последнем прогоне) VBoxManage guestproperty set "WindowsXP" RUNNING 1 --flags TRANSIENT устанавливает свойство RUNNING для машины Windows, которая может управляться с гостевой ОС VBoxManage guestproperty wait "WindowsXP" RUNNING, ожидает, что свойство RUNNING будет удалено из гостевой Windows VBoxManage controlvm "SeverApp" savestate, завершает работу виртуальной машины приложения VM в savestate dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" \ /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop завершает хост Lubuntu (состояние выключения) без взаимодействия с пользователем.