Was ist der Unterschied zwischen den Benutzer- und Systemdiensten von systemd?

6

Ich versuche, ein wenig besseres System zu verstehen, indem ich einige Dienste schreibe.

Ich habe zum Beispiel Schwierigkeiten, die Unterschiede zwischen diesen beiden Diensten zu verstehen. Ich möchte sichergehen, dass ich sie richtig verstehe.

So habe ich zum Beispiel einen Torrent-Dienst erhalten, der als RT als Systemdienst definiert ist und den ich für Benutzer X, Y, Z mit sudo systemctl enable [email protected] aktivieren kann

➜  ~  cat /etc/systemd/system/[email protected]
[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

und ich habe Dropbox so definiert:

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

[Install]
WantedBy=multi-user.target

Wenn ich es richtig verstehe, kann der Dropbox-Dienst für viele Benutzer auf Benutzerebene gestartet / gestoppt / aktiviert / deaktiviert werden, auch wenn dieser Benutzer kein Administrator ist. Bedeutet das, dass ich es als userX für userY aktivieren kann? Was den RT-Dienst betrifft, kann ihn nur ein Administrator aktivieren / starten / stoppen ... Ist das der einzige Unterschied zwischen einem Systemdienst und einem Benutzerdienst?

euri10
quelle

Antworten:

12

Du bist ein bisschen durcheinander, ja. ☺ Sie haben:

  • Eine Reihe von Systemdiensten , die von der systemweiten Instanz von systemd verwaltet werden. Dies sind jeweils eine Instanz einer Vorlagenserviceeinheit in der Datei /etc/systemd/system/[email protected].
  • Eine Reihe von Benutzerdiensten , die von den Einzelbenutzerinstanzen von systemd verwaltet werden. Dabei handelt es sich jeweils um eine Instanziierung einer Vorlagenserviceeinheit in der Datei /etc/systemd/user/[email protected].

Das müssen Sie jetzt verstehen:

  • Es gibt eine systemweite Instanz von systemd. Es läuft immer. Es ist Prozess Nr. 1. Nur ein Administrator hat die Berechtigung, Systemdienste zu steuern.
  • Es gibt mehrere benutzerspezifische Instanzen von systemd. Sie werden bei Bedarf gestartet / gestoppt, wenn sich Benutzer anmelden / abmelden. Sie sind nicht Prozess # 1. Es gibt maximal einen pro Benutzer, der Benutzer ist jedoch häufig angemeldet. Nur dieser Benutzer (oder ein Administrator) hat die Berechtigung, xyr-eigene Dienste zu steuern.

Mit einer Vorlagenserviceeinheit können mehrere Ad-hoc-Serviceeinheiten im laufenden Betrieb erstellt werden, die sich in den Vorlagenparametern unterscheiden. Die tatsächlichen instanziierten Serviceeinheiten werden als Kombination aus dem Vorlagennamen und dem Parameter benannt.

Alles zusammen bedeutet:

  • In Ihrem ist [email protected]der Parameter ein Benutzername, der verwendet wird, um den Benutzer, unter dem der Dienst ausgeführt wird, und das Arbeitsverzeichnis anzugeben, in dem er ausgeführt wird. So können Sie Dienste wie [email protected]und instanziieren [email protected]. Hierbei handelt es sich um Systemdienste , die von der systemweiten Instanz von systemd verwaltet werden und die von einem Administrator gestartet und gestoppt werden müssen. Es kommt einfach so vor, dass es einen pro Benutzer gibt.
  • In Ihrem wird [email protected]der Parameter ignoriert. Sie können Dienste wie [email protected]und instanziieren [email protected]. Dies sind Benutzer Dienste, verwaltet durch die pro Benutzer Instanzen von systemd. Jeder Benutzer hat einen eigenen Satz von Vorlageninstanziierungen, die er starten und stoppen kann.

Möglicherweise wollten Sie nicht, dass Ihre Dropbox-Serviceeinheit eine Vorlage ist. Oder Sie überlegen sich jetzt, worum es in dieser Environment=DISPLAY=%iEinstellung ging. ☺

JdeBP
quelle