Gibt es so etwas wie einen Benutzer-Daemon?

10

Ich muss einige Hintergrundprozesse ausführen, die so lange ausgeführt werden, wie ich mit einem bestimmten Benutzer angemeldet bin.

Gibt es so etwas wie einen Benutzer-Daemon? Ich kenne nur globale Dämonen, die vom Start des Computers bis zum Herunterfahren (oder manuellem Starten / Töten) leben.

Im Moment habe ich ein Skript erstellt, das prüft, ob der Prozess bereits vorhanden ist, und den Prozess erstellt, wenn dies nicht der Fall ist. Dieses Skript wird dann mit dem nohupBefehl von my ausgeführt .profile. Auf diese Weise wird der Prozess beim Start gestartet und nur einmal gestartet (auch wenn mehrere rxvtBegriffe kommen und gehen). Es wird jedoch nie getötet, nachdem ich mich angemeldet habe (was keine Katastrophe ist, aber es ist sauberer, den Prozess auch zu beenden).

Romeovs
quelle

Antworten:

8

Mit systemd können Benutzer ihre eigenen systemd-Instanzen ausführen, um private Daemons zu verwalten.

Wenn Sie systemd bereits installiert haben, müssen Sie systemd --userIhre Dienste nur durch Ausführen starten und verwalten systemctl --user. Benutzerdienste werden in gesucht ~/.config/systemd/user.

Standardmäßig beendet systemd die Benutzerdienste beim Abmelden (wie von Ihnen angefordert). Dieses Verhalten kann geändert werden, indem für einen Benutzer mit dem loginctl --enable-linger $USERBefehl das Verweilen aktiviert wird .

Weitere Informationen finden Sie auf der ArchWiki-Seite .

aekojouz
quelle
1
Gibt es eine Einstellung, mit der das Aktivieren von Verweilen aus einer Konfigurationsdatei anstelle eines Bash-Befehls funktioniert?
CMCDragonkai
4

Der dbus-Dienst ist genau dafür gedacht, dass ... ok, er kann genau dafür verwendet werden :-). Das dbus-Deamon pro Benutzer wird gestartet, wenn sich ein Benutzer bei einer Desktop-Umgebung anmeldet, und wird beendet, wenn sich der Benutzer abmeldet (siehe Manpage von dbus-launchund die Option --exit-with-session). Ein dbus-Dienst kann zusammen mit der dbus-Instanz oder beim ersten Aufruf der Dienstschnittstelle über dbus gestartet werden. Jeder Benutzer kann seine eigenen dbus-Dienstspezifikationen haben, die in einem versteckten Verzeichnis in der Startseite des Benutzers oder global in definiert sind /etc. Auf der dbus-Homepage auf freedesktop finden Sie zahlreiche Dokumentationen und Referenzimplementierungen.

Ich benutze heutzutage nur Debian-basierte Distributionen. Alle diese haben Skripte, in /etc/X11/Xsession.ddenen sehr oft eine Zeichenfolge geändert wird, die ganz am Ende als Befehl ausgewertet wird, mit dem die ausgewählte Desktop-Umgebung gestartet wird. Es gibt ein solches Skript für dbus, das dem Befehl den dbus-Wrapper voranstellt dbus-launch. Dieser Wrapper startet einen dbus-Server und zumindest auf Vanilla Debian (und ich bin bereit zu sagen "auf allen Debian-basierten Distributionen") dbus-launchwird die Option gegeben --exit-with-session.

Sie sollten in der Lage sein, die Prozesse, die ausgeführt werden sollen, zu verpacken, während ein Benutzer bei einem dbus-Dienst angemeldet ist und IIRC dbus sich automatisch darum kümmert, seine Dienste vor dem Beenden zu beenden.

Bananguin
quelle
2

Wenn Sie BASH als Shell verwenden, können Sie versuchen, in ~ / .bash_logout eine Erkennung durchzuführen und den laufenden Prozess herunterzufahren.

Was Sie wahrscheinlich längerfristig suchen, ist die Interaktion (z. B. über D-Bus) mit etwas wie ConsoleKit oder systemds logind .

Peterph
quelle