3

Я пытаюсь понять немного лучше systemd, написав несколько сервисов.

У меня есть трудности в понимании различий между этими двумя службами, например, я хотел бы быть уверен, что правильно их понял, было бы более уместным.

Так, например, я получил службу rtorrent, определенную как rt как системную службу, которую я могу включить для пользователя X, Y, Z с помощью sudo systemctl enable rt@userX.service

➜  ~  cat /etc/systemd/system/rt@.service
[Unit]
Description=rTorrent
Requires=network.target local-fs.target

[Service]
Type=forking
KillMode=none
User=%I
ExecStart=/usr/bin/tmux new-session -s rt -n rtorrent -d rtorrent
ExecStop=/usr/bin/tmux send-keys -t rt:rtorrent C-q
WorkingDirectory=/home/%I/
Restart=on-failure

[Install]
WantedBy=multi-user.target

и я получил Dropbox таким образом:

➜  ~  cat /etc/systemd/user/dropbox@.service
[Service]
ExecStart=/bin/sh %h/.dropbox-dist/dropboxd
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

Если я хорошо понимаю, службу dropbox можно запустить / остановить / включить / отключить на уровне пользователя для многих пользователей, даже если этот пользователь не является администратором. Означает ли это, что я могу как userX включить его для userY? Что касается службы rt, то только администратор может включить / запустить / остановить ее ... Это единственная разница между системной службой и пользовательской?

1 ответ1

6

Вы немного запутались, да. ☺ у вас есть:

  • Набор системных служб, которые управляются общесистемным экземпляром systemd; каждый из которых представляет собой единицу службы шаблонов в файле /etc/systemd/system/rt@.service .
  • Набор пользовательских сервисов, управляемых экземплярами systemd для каждого пользователя ; каждый из которых является экземпляром модуля службы шаблонов в файле /etc/systemd/user/dropbox@.service .

Теперь вам нужно понять это:

  • Существует один общесистемный экземпляр systemd. Это всегда работает. Это процесс № 1. Только администратор имеет полномочия контролировать системные службы.
  • Существует несколько экземпляров systemd для каждого пользователя. Они запускаются / останавливаются по требованию при входе / выходе из системы. Они не процесс № 1. Существует максимум один на пользователя, однако много раз пользователь вошел в систему. Только этот пользователь (или администратор) имеет право контролировать собственные службы xyr.

Шаблонный сервисный блок - это способ создания нескольких специальных сервисных блоков на лету, которые отличаются параметром шаблона. Фактические экземпляры сервисных единиц именуются как комбинация имени шаблона и параметра.

В совокупности это все означает:

  • В вашем rt@.service параметр представляет собой имя пользователя, используемое для указания пользователя, от имени которого запускается служба, и рабочего каталога, в котором она работает. Таким образом, вы можете создавать экземпляры таких сервисов, как rt@euri10.service и rt@david.service . Это системные службы, управляемые общесистемным экземпляром systemd, и для их запуска и остановки требуется администратор. Так уж получилось, что по одному на пользователя.
  • В вашем dropbox@.service этот параметр игнорируется. Вы можете создавать такие службы, как dropbox@wibble.service и dropbox@phooey.service . Это пользовательские сервисы, управляемые экземплярами systemd для каждого пользователя . У каждого пользователя есть свой собственный набор шаблонов, который этот пользователь может запускать и останавливать.

Возможно, вы не хотите, чтобы ваш сервисный модуль Dropbox был шаблоном. Или вы теперь выясняете, что это за настройка Environment=DISPLAY=%i . ☺

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .