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.