Ubuntu 15.04 systemd по сравнению с выскочкой

В отличие от предыдущих версий Ubuntu 15.04 теперь использует systemd вместо upstart. Для запуска программ при начальной загрузке, я всегда создавал conf-файлы в /etc/init/. Они были бы похожи на это:

start on login-session-start
script
/usr/bin/x11vnc -auth /var/run/lightdm/root/:0  -display :0  -rfbauth /etc/x11vnc.pass  -rfbport 5900  -noxrecord -noxfixes -noxdamage -forever -bg  -o /var/log/x11vnc.log
end script

К сожалению, это больше не работает в Ubuntu 15.04, и я пытался найти эквивалент этому conf-файлу, который работает с systemd. Хотя Интернет еще не был вполне так находчив.

Что необходимо для запуска вышеупомянутого conf-файла при начальной загрузке? Есть ли переводчики между выскочкой и systemd?

0
задан 16 June 2015 в 01:49

1 ответ

Если Вы хотите, можно вместо этого сделать systemd .service файл, который делает то же самое. Основной systemd .service файл для вышеупомянутой команды мог бы быть похожим на следующее:

[Unit]
Description=Start VNC server
Requires=lightdm.service
After=lightdm.service

[Service]
ExecStart=/usr/bin/x11vnc -auth /var/run/lightdm/root/:0  -display :0  -rfbauth /etc/x11vnc.pass  -rfbport 5900  -noxrecord -noxfixes -noxdamage -forever

[Install]
WantedBy=graphical.target

Информация на заметку:

  • Поскольку этот сервис полагается на запуск lightdm, я добавил a Requires=lightdm.service. Это означает это, если этот сервис требуют запуститься, то lightdm.service также попросится запуститься, но если lightdm.service сбои для запуска затем этот сервис не попросят запуститься. Кроме того, After=lightdm.service необходим так, чтобы этот сервис запустился, после 'lightdm.service закончил запускаться.
  • Выполняемая команда не имеет -bg указанный. В systemd предпочтено, что сервисы остаются на переднем плане, так, чтобы systemd знал, что они работают. Обратите внимание, что возможно указать файл PID для сервиса, который входит в фон.
  • WantedBy=graphical.target указывает, что, как часть запуска Вашего GUI, это должно также начать.

Для установки этого файла так, чтобы сервис был выполнен как корень добавьте этот файл в /etc/systemd/system. Затем выполненный sudo systemctl enable <filename> (где <filename> название сервисного файла в /etc/systemd/system). Символьная ссылка должна быть создана в /etc/systemd/system/graphical.target.wants/. После перезагрузки, когда Вы работаете systemctl status <filename>, необходимо видеть, что сервис распознан и еще не запущен.

Отметьте это /etc/systemd/system/ предназначен для сервисов в масштабе всей системы, которые системного администратора (Вы) добавляете. /lib/systemd/system/ предназначен для сервисов в масштабе всей системы, установленных пакетами. Вы не должны делать символьную ссылку на /lib/systemd/system/ чтобы сервис загрузился. Ниже таблицы (взятый от systemd.unit страница справочника), описывает то, для чего каждое местоположение относительно системных служб (существуют отдельные тракты для пользовательских сервисов):

   ┌────────────────────┬─────────────────────────────┐
   │Path                │ Description                 │
   ├────────────────────┼─────────────────────────────┤
   │/etc/systemd/system │ Local configuration         │
   ├────────────────────┼─────────────────────────────┤
   │/run/systemd/system │ Runtime units               │
   ├────────────────────┼─────────────────────────────┤
   │/lib/systemd/system │ Units of installed packages │
   └────────────────────┴─────────────────────────────┘
4
ответ дан 4 October 2019 в 03:20

Другие вопросы по тегам:

Похожие вопросы: