c'è qualcosa come un demone per utente?


11

Devo eseguire alcuni processi in background che durano finché ho effettuato l'accesso con un determinato utente.

Esiste qualcosa come un demone per utente? Conosco solo demoni globali che vivono dall'avvio del computer fino allo spegnimento (o all'avvio / uccisione manuale).

per ora ho creato uno script che controlla se il processo esiste già e crea il processo in caso contrario. Questo script viene quindi eseguito con il nohupcomando dal mio .profile. In questo modo il processo si avvia all'avvio e viene avviato solo una volta (anche con più rxvttermini che vanno e vengono). Tuttavia, non viene mai ucciso dopo aver effettuato l'accesso (che non è un disastro ma è anche più pulito terminare il processo).

Risposte:


9

systemd consente agli utenti di eseguire le proprie istanze di systemd per gestire i daemon privati.

Se hai già installato systemd, tutto ciò che devi fare è avviare systemd --usere gestire i tuoi servizi eseguendo systemctl --user. I servizi utente verranno cercati in ~/.config/systemd/user.

Di default systemd eliminerà i servizi utente al logout (come richiesto). Questo comportamento può essere modificato abilitando la permanenza per un utente con il loginctl --enable-linger $USERcomando.

Le informazioni mor sono disponibili nella pagina ArchWiki .


1
Esiste un'impostazione per far funzionare l'abilitazione persistente da un file di configurazione anziché da un comando bash.
CMCDragonkai,

4

Il servizio dbus è pensato per il preciso ... ok, può essere usato per il preciso :-). Il deamon dbus per utente viene avviato quando un utente accede a un ambiente desktop e termina quando l'utente si disconnette (vedere la pagina man di dbus-launche l'opzione --exit-with-session). Un servizio dbus può essere avviato insieme all'istanza dbus o quando l'interfaccia del servizio viene chiamata la prima volta tramite dbus. Ogni utente può avere le proprie specifiche dei servizi dbus, definite in una directory nascosta nella home degli utenti o in tutto il mondo /etc. Vedi la homepage di dbus su freedesktop per molta documentazione e implementazione di riferimento.

Attualmente utilizzo solo distribuzioni basate su Debian. Tutti quelli hanno script in /etc/X11/Xsession.dcui molto spesso modificano una stringa che alla fine verrà valutata come il comando che avvia l'ambiente desktop selezionato. Esiste uno di questi script per dbus, che antepone il comando con il wrapper dbus dbus-launch. Questo wrapper avvia un server dbus e almeno su Debian vanilla (e sono disposto a dire "su tutte le distribuzioni basate su Debian") dbus-launchè data l'opzione --exit-with-session.

Dovresti essere in grado di avvolgere i processi che desideri eseguire mentre un utente è connesso a un servizio dbus e IIRC dbus si occupa automaticamente di terminare i suoi servizi prima di uscire.


2

Se stai usando BASH come shell, potresti provare a fare un po 'di rilevamento in ~ / .bash_logout e chiudere il processo in esecuzione.

Ciò che probabilmente stai cercando a lungo termine è interagire (ad esempio tramite D-Bus) con qualcosa come ConsoleKit o il logind di systemd .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.