J'ai besoin d'exécuter certains processus d'arrière-plan qui durent aussi longtemps que je suis connecté avec un certain utilisateur.
Existe-t-il quelque chose comme un démon par utilisateur? Je ne connais que les démons mondiaux qui vivent du démarrage de l'ordinateur jusqu'à l'arrêt (ou le démarrage / arrêt manuel).
pour l'instant j'ai fait un script qui vérifie si le processus existe déjà et crée le processus s'il ne l'est pas. Ce script est ensuite exécuté avec la nohup
commande de my .profile
. De cette façon, le processus se lance au démarrage et n'est lancé qu'une seule fois (même avec plusieurs rxvt
termes entrants et sortants). Pourtant, il n'est jamais tué après la connexion (ce qui n'est pas un désastre mais il est plus propre de terminer également le processus).
la source
Le service dbus est précisément destiné à cela ... ok, il peut être utilisé précisément pour cela :-). Le démon dbus par utilisateur est démarré lorsqu'un utilisateur se connecte à un environnement de bureau et se termine lorsque l'utilisateur se déconnecte (voir la page de manuel de
dbus-launch
et l'option--exit-with-session
). Un service dbus peut être démarré avec l'instance dbus ou lorsque l'interface du service est appelée la première fois via dbus. Chaque utilisateur peut avoir ses propres spécifications de services dbus, définies dans un répertoire caché dans la maison des utilisateurs, ou globalement dans/etc
. Voir la page d'accueil de dbus sur freedesktop pour beaucoup de documentation et d'implémentation de référence.Je n'utilise que des distributions basées sur Debian ces jours-ci. Tous ceux-ci ont des scripts dans
/etc/X11/Xsession.d
lesquels très souvent modifient une chaîne qui à la fin sera évaluée comme la commande qui démarre l'environnement de bureau sélectionné. Il existe un tel script pour dbus, qui ajoute la commande au wrapper dbusdbus-launch
. Ce wrapper lance un serveur dbus et au moins sur vanille Debian (et je suis prêt à dire "sur toutes les distributions basées sur Debian") adbus-launch
la possibilité--exit-with-session
.Vous devriez pouvoir encapsuler les processus que vous souhaitez exécuter pendant qu'un utilisateur est connecté à un service dbus et que le dbus IIRC se charge automatiquement de mettre fin à ses services avant de quitter.
la source
Si vous utilisez BASH comme shell, vous pouvez essayer de faire une détection dans ~ / .bash_logout et arrêter le processus en cours d'exécution.
Ce que vous cherchez probablement à plus long terme est en interaction (par exemple via D-Bus) avec quelque chose comme ConsoleKit ou de systemd de logind .
la source