Neben der Verwaltung von Diensten wie Nginx oder Cups kann systemd auch die Dienste eines Benutzers verwalten. Insbesondere ist die Funktion der Sockets interessant, da systemd selbst die (Socket-)Schnittstelle des Dienstes öffnen kann und erst später den Dienst startet, wenn eine Verbindungsanfrage eintrifft. Somit stehen potentiell viele Dienste bereit, aber verbrauchen keine Ressourcen, solange sie nicht genutzt werden.
Welche Dienste und Sockets über systemd verwaltet werden können, kann man sich
mit systemctl --user list-unit-files -t service,socket
anzeigen lassen. Diese
Einheiten lassen sich dann mit systemctl --user enable …
oder disable
aktivieren bzw. deaktivieren. Um einen Prozess per Hand zu starten oder zu
stoppen kann man mit start
und stop
arbeiten.
Neustart von Benutzerdiensten
Man kann auch Dienste von Benutzern, die von systemd betreut werden, neu starten. Wenn Pakete, insbesondere Bibliotheken, aktualisiert wurden, müssen die dazugehörigen Prozesse neu gestartet werden, damit auch der neue Code verwendet wird – vor allem um Sicherheitslücken zu beheben.
Mir sind bei needrestart immer auch Prozesse von aktuell angemeldeten
Benutzern aufgefallen, die als Kindprozesse von systemd liefen. Daher kam mir
die Idee, diese einfach mit systemctl --user restart …
zu einem Neustart
aufzufordern und siehe da, es hat auch funktioniert. Die Prozesse liefen fortan
mit den neuen Bibliotheken.
Ebenso kann der systemd-Prozess für den Benutzer mit systemctl --user
daemon-reexec
neu gestartet werden, sollten sich für diesen Bibliotheken
geändert haben.
Wenn needrestart oder checkrestart also Prozesse meldet, die neu gestartet werden müssen, von systemd verwaltete werden und einem Benutzer gehören, so kann man dies auch über das Programm systemctl mit der Option --user auslösen.