czy istnieje coś takiego jak demon na użytkownika?

11

Muszę uruchomić niektóre procesy działające w tle, dopóki jestem zalogowany z określonym użytkownikiem.

Czy istnieje coś takiego jak demon na użytkownika? Znam tylko globalne demony, które żyją od uruchomienia komputera do wyłączenia (lub ręcznego uruchomienia / zabicia).

na razie stworzyłem skrypt, który sprawdza, czy proces już istnieje, i tworzy go, jeśli nie istnieje. Ten skrypt jest następnie uruchamiany za pomocą nohuppolecenia z mojego .profile. W ten sposób proces uruchamia się przy starcie i jest uruchamiany tylko raz (nawet przy wielu rxvtterminach wchodzących i wychodzących). Jednak nigdy nie zostaje zabity po zalogowaniu (co nie jest katastrofą, ale czystsze jest także zakończenie procesu).

Romeovs
źródło

Odpowiedzi:

9

systemd umożliwia użytkownikom uruchamianie własnych wystąpień systemd w celu zarządzania prywatnymi demonami.

Jeśli masz już zainstalowany system, wszystko, co musisz zrobić, to uruchomić systemd --userswoje usługi i zarządzać nimi przez uruchomienie systemctl --user. Usługi użytkownika będą wyszukiwane w ~/.config/systemd/user.

Domyślnie systemd zabija usługi użytkownika podczas wylogowywania (zgodnie z żądaniem). To zachowanie można zmienić, włączając użytkownika z loginctl --enable-linger $USERpoleceniem.

Więcej informacji można znaleźć na stronie ArchWiki .

aekojouz
źródło
1
Czy istnieje ustawienie umożliwiające działanie funkcji Linger Enable z pliku konfiguracyjnego zamiast polecenia bash.
CMCDragonkai
4

Usługa dbus jest przeznaczona do tego, aby ... ok, można z niej korzystać dokładnie :-). Diamon dbus na użytkownika jest uruchamiany, gdy użytkownik loguje się do środowiska pulpitu, i kończy się, gdy użytkownik się wylogowuje (patrz strona podręcznika użytkownika dbus-launchi opcja --exit-with-session). Usługa dbus może zostać uruchomiona razem z instancją dbus lub gdy interfejs usługi zostanie wywołany po raz pierwszy przez dbus. Każdy użytkownik może mieć własne specyfikacje usług dbus, zdefiniowane w ukrytym katalogu w domu użytkownika lub globalnie w /etc. Zobacz stronę główną dbus na freedesktop, aby uzyskać dużo dokumentacji i referencji.

Obecnie używam tylko dystrybucji opartych na Debianie. Wszystkie mają skrypty, w /etc/X11/Xsession.dktórych bardzo często modyfikują ciąg znaków, który na samym końcu zostanie oceniony jako polecenie uruchamiające wybrane środowisko pulpitu. Istnieje jeden taki skrypt dla dbus, który poprzedza polecenie opakowaniem dbus dbus-launch. To opakowanie uruchamia serwer dbus i przynajmniej na waniliowym Debianie (i jestem skłonny powiedzieć „na wszystkich dystrybucjach opartych na Debianie”) dbus-launchma tę opcję --exit-with-session.

Powinieneś być w stanie owinąć procesy, które chcesz uruchomić, gdy użytkownik jest zalogowany do usługi dbus, a IIRC dbus automatycznie zajmuje się zakończeniem swoich usług przed wyjściem.

Bananguin
źródło
2

Jeśli używasz BASH jako powłoki, możesz spróbować przeprowadzić wykrywanie w ~ / .bash_logout i zamknąć uruchomiony proces.

To, czego prawdopodobnie szukasz w dłuższej perspektywie, to interakcja (np. Przez D-Bus) z czymś takim jak ConsoleKit lub logd systemu .

Peter
źródło