CentOS 7 – Использование systemctl для запуска виртуальной машины без головы

Я не совсем уверен, что то, что я пытаюсь сделать, может работать. Я хотел бы запустить виртуальную машину vbox как службу и включить ее при запуске. Вот мой сценарий .service:

[Unit] Description=Virtualbox Headless VM Wants=network-online.target After=network-online.target [Service] Type=forking ExecStart=/usr/bin/VBoxHeadless -s vbox_uuid ExecStop=/usr/bin/VBoxManage controlvm vbox_uuid poweroff User=myuser [Install] WantedBy=muti-user.target 

Когда я пытаюсь начать это нормально, мой cli зависает и не разветвляет процесс. У кого-нибудь есть мысли / идеи / предложения?

Статус systemctl дает мне следующее:

 Jun 20 07:17:07 localhost.localdomain systemd[1]: Starting Virtualbox Headless VM... Jun 20 07:17:09 localhost.localdomain pulseaudio[4143]: [pulseaudio] socket-server.c: bind(): Address already in use Jun 20 07:17:09 localhost.localdomain pulseaudio[4143]: [pulseaudio] module.c: Failed to load module "module-esound-protocol-unix" (argument: ""): initialization failed. Jun 20 07:17:09 localhost.localdomain pulseaudio[4143]: [pulseaudio] main.c: Module load failed. Jun 20 07:17:09 localhost.localdomain pulseaudio[4143]: [pulseaudio] main.c: Failed to initialize daemon. Jun 20 07:17:09 localhost.localdomain pulseaudio[4140]: [pulseaudio] main.c: Daemon startup failed. Jun 20 07:18:37 localhost.localdomain systemd[1]: vboxmachines.service operation timed out. Terminating. Jun 20 07:18:37 localhost.localdomain systemd[1]: Failed to start Virtualbox Headless VM. Jun 20 07:18:37 localhost.localdomain systemd[1]: Unit vboxmachines.service entered failed state. 

Благодаря!

    One Solution collect form web for “CentOS 7 – Использование systemctl для запуска виртуальной машины без головы”

    У вас несоответствие протокола готовности.

    Type услуги важен. Эта настройка означает, что система протокола готовности ожидает, что служба будет говорить. Предполагается, что simple услуга будет немедленно готова. Служба forking берется, чтобы быть готовой после того, как ее начальный процесс разворачивает ребенка, а затем выходит. Служба dbus берется за готовность, когда сервер появляется на настольной шине. И так далее.

    Если вы не получите протокол готовности, объявленный в сервисном модуле, в соответствии с тем, что делает служба, тогда все идет вразрез. Несоответствия протокола готовности заставляют службы не запускаться правильно или (чаще), чтобы (ошибочно) диагностироваться с помощью systemd как сбоя. Когда служба считается неудачной, поскольку протокол готовности никогда не запускает systemd, он гарантирует, что каждый потерянный дополнительный процесс службы, который мог быть оставлен запущенным как часть отказа (с его точки зрения), был убит, чтобы правильно вернитесь в неактивное состояние.

    VBoxHeadless не (бесполезно) VBoxHeadless и выходит. В VirtualBox doco указано это явно. Таким образом, правильная настройка в вашем сервисном модуле Type=simple .

    Кстати, остальные из нас могут отслеживать происхождение вашего сервисного подразделения на эту анонимную запись на форуме ArchLinux, вероятно, через пост после StackOverflow , потому что вы скопировали очень орфографическую ошибку, которую сделал анонимный человек. Правильное написание – WantedBy=mu l ti-user.target . Это прошло два с половиной года (и 2170 просмотров), не будучи замеченным. Несомненно, это был и ваш следующий вопрос.

    Здесь используется шаблонный сервисный модуль из вики Arch Linux, который параметризует UUID виртуальной машины.

    дальнейшее чтение

    • «VBoxHeadless, удаленный настольный сервер» . Руководство пользователя VM VM VirtualBox®: удаленные виртуальные машины . 2004. Корпорация Oracle.
    • «Запуск виртуальных машин со службой» . VirtualBox . Arch Linux wiki.
    • Джонатан де Бойн Поллард (2001). « Не вилка (), чтобы« положить dæmon в фон ». ». Ошибки, которых следует избегать при разработке программ Unix dæmon . Часто задаваемые ответы.
    Linux и Unix - лучшая ОС в мире.