Мне нужно запустить систему программного обеспечения, которая предназначена для установки в качестве устройства на выделенном компьютере. Чтобы сэкономить энергию, я планирую запустить систему на виртуальной машине VirtualBox.
Хост - это стандартная Linux-система с системой SysV-Init, гостем является сильно модифицированный Linux, и я бы предпочел не менять его дальше. VirtualBox используется в версии OSE.
Я уже разобрался, как запустить виртуальную машину при загрузке хоста ( Edit: это делается, как Никхил упоминал ниже, с помощью команды VBoxManager startvm
), но как я могу корректно завершить работу VM? Любой скрипт, работающий на хосте, должен будет ждать, пока гость полностью не отключится.
Кто-нибудь может подсказать, как, например, должен выглядеть сервисный файл, делающий это?
источник
Ответы:
Вы пробовали
acpipowerbutton
из этого набора команд?Редактировать после прочтения комментариев:
Вы можете использовать
acpid
или другие утилиты acpi, чтобы сделать его изящным. Кроме того, можете ли вы предоставить больше информации о том, как вы выключаете машину в данный момент?Равнина
shutdown
не будет ждать незавершенных работ, задержка может быть слишком большой.Я предполагаю, что вы не используете оконный менеджер, поэтому попробуйте этот инструмент.
Просто видел этого демона . Вы можете найти это полезным.
источник
vboxmanage list runningvms
пока ваша ВМ не исчезнет.Вместо того, чтобы кодировать это самостоятельно, рассмотрите возможность использования Vagrant , который создан для создания экземпляров и управления экземплярами виртуальных ящиков. Документация отличная, и я предлагаю вам проверить ее, а не пытаться накатить свою.
Суть в том, что вы создаете простой управляющий файл, а затем запускаете
vagrant up
для запуска столько экземпляров VirtualBox, сколько хотите. Вы можете использоватьvagrant ssh
для входа в хосты иvagrant halt
выключить хост (без завершения).vagrant destroy
избавится от экземпляров.Он поддерживает инициализацию с помощью Puppet, Ansible или Chef и позволяет вам контролировать большинство выставленных настроек конфигурации VBox.
источник
У меня есть такое же приложение, как у вас, с одним отличием: мне нужно перезагрузить систему и восстановиться из снимка.
То, что вас интересует, это безголовый режим .
У меня есть несколько таких служб, поэтому я использую следующий скрипт:
VBox_StopRestoreStart.sh
Если вы хотите отключить виртуальную машину, у вас есть два варианта, в зависимости от вашего приложения:
VBoxManage controlvm <uuid>|<VMname> acpipowerbutton
VBoxManage controlvm <uuid>|<VMname> acpisleepbutton
VBoxManage controlvm <uuid>|<VMname> savestate
СОВЕТЫ: Вы можете найти полезное:
VBoxManage list vms
- список доступных vmsrdesktop IP-ADDR:3389
илиrdesktop-vrdp IP-ADDR:3389
- когда вам нужен графический интерфейс (даже удаленно ), когда вы работаете в автономном режиме:VBoxHeadless -s <uuid>|<VMname>
VBoxManage startvm
- начать с графического интерфейса для локальной отладкиСоответствующая глава руководства VirtualBox: Глава 7. Удаленные виртуальные машины. Шаг за шагом: создание виртуальной машины на автономном сервере
PS Если вы заинтересованы в полнофункциональных уже реализованных решениях, OpenStack кажется интересным выбором.
источник
Изучите документацию по управлению виртуальными машинами VirtualBox по адресу http://www.virtualbox.org/manual/ch08.html.
Для вывода списка виртуальных машин используйте команду
VBoxManage list vms
Для запуска ВМ используйте команду
VBoxManage startvm
http://www.virtualbox.org/manual/ch08.html#vboxmanage-controlvm
Для управления ВМ используйте
VBoxManage controlvm
controlvm
Субкоманда позволяет изменить состояние виртуальной машины , которая в настоящее время работает. Можно указать следующее:VBoxManage controlvm <vm> pause
временно приостанавливает работу виртуальной машины, не изменяя ее состояние навсегда. Окно виртуальной машины будет окрашено в серый цвет, чтобы указать, что виртуальная машина в данный момент приостановлена. (Это эквивалентно выбору пункта «Пауза» в меню «Машина» GUI.)Используйте
VBoxManage controlvm <vm> resume
для отмены предыдущей команды паузы. (Это эквивалентно выбору пункта «Возобновить» в меню «Машина» GUI.)VBoxManage controlvm <vm> reset
на виртуальной машине действует так же, как нажатие кнопки «Сброс» на реальном компьютере: холодная перезагрузка виртуальной машины, которая немедленно перезапустит и снова загрузит гостевую операционную систему. Состояние виртуальной машины не сохраняется заранее, и данные могут быть потеряны. (Это эквивалентно выбору пункта «Сброс» в меню «Машина» GUI.)VBoxManage controlvm <vm> poweroff
действует на виртуальную машину так же, как и на кабель питания на реальном компьютере. Опять же, состояние виртуальной машины не сохраняется заранее, и данные могут быть потеряны. (Это эквивалентно выбору пункта «Закрыть» в меню «Машина» графического интерфейса или нажатию кнопки закрытия окна, а затем выбору «Выключить машину» в диалоговом окне.)После этого состояние виртуальной машины будет отключено.
источник
vboxmanage
(все в нижнем регистре).VBoxManage controlvm
подкоманд не делает этого./etc/init.d/vboxvms-service
скрипт, на хост-системе, который при запуске включит все vms и после остановки заставит все vms выключиться.VBoxManage controlvm savestate
Это еще одна возможность (по крайней мере, Google говорит мне), она сохраняет состояние компьютеров и корректно завершает работу, но по-прежнему не может заставить хост ждать.Для системной системы вы можете попробовать это.
Шаг № 1: создать сервисный файл
Шаг № 2: Включить служебный файл
Рекомендации
источник
VBoxHeadless -s %i
для запуска иVBoxManage controlvm %i savestate
остановки виртуальной машины.Как насчет отправки команды через ssh с хоста на гостя?
Я не уверен, что это работает, и если вы можете проверить состояние машины после этого или получить что-то вроде состояния выхода, но это должно быть чистым по крайней мере.
источник
Мое решение: в этом сценарии оболочки «root» является инициатором, а «theuser» является владельцем «thevm»
Я знаю, что vms закончился, когда выходные данные команды
VBoxManage list runningvms
возвращают пустую строку.источник
Для запуска vm:
Чтобы остановить ВМ:
Список всех запущенных виртуальных машин:
источник
Может быть, это поможет как часть решения.
источник
Почему бы вам не войти в свой гость и не отключиться оттуда?
Если у вас нет веской причины не устанавливать sshd и не получать доступ к виртуальной машине через VBox, я бы выбрал скрипт, который просто выдает
ssh shutdown -h now
. Если честно, я бы создал скрипт для каждой машины, который правильно выключит его и проведет некоторые проверки на нем.Просто упакуйте /etc/init.d/shutdown_vm скрипт, который вызывает другой с хоста, вызов будет блокирован, пока не будет готов. Этот процесс (как описано) добавляет зависимость linux на гостя, но удаляет зависимость VBox на хосте.
Сокращение к погоне: вам не нужен доступ к VBox для выключения компьютера, если у вас есть какие-то средства доступа к нему (например, ssh), то ОС всегда будет иметь для этого какие-то средства (включение, разумеется, другое)
источник