¿Hay algo como un demonio por usuario?


11

Necesito ejecutar algunos procesos en segundo plano que vivan mientras esté conectado con un determinado usuario.

¿Existe algo así como un demonio por usuario? Solo conozco demonios globales que viven desde el inicio de la computadora hasta el apagado (o el inicio / apagado manual).

por ahora hice un script que verifica si el proceso ya existe y crea el proceso si no existe. Este script se ejecuta con el nohupcomando de mi .profile. De esta manera, el proceso se inicia al inicio y solo se inicia una vez (incluso con varios rxvttérminos que van y vienen). Sin embargo, nunca se mata después de iniciar sesión (lo cual no es un desastre, pero es más limpio también finalizar el proceso).

Respuestas:


9

systemd permite a los usuarios ejecutar sus propias instancias systemd para administrar demonios privados.

Si ya tiene instalado systemd, todo lo que tiene que hacer es iniciar systemd --usery administrar sus servicios ejecutando systemctl --user. Se buscarán servicios de usuario en ~/.config/systemd/user.

Por defecto, systemd eliminará los servicios de usuario al cerrar sesión (como usted solicitó). Este comportamiento puede alterarse permitiendo que un usuario permanezca con el loginctl --enable-linger $USERcomando.

Se puede encontrar más información en la página de ArchWiki .


1
¿Existe una configuración para hacer que la habilitación persista funcione desde un archivo de configuración en lugar de un comando bash?
CMCDragonkai

4

El servicio dbus está destinado precisamente a ... ok, se puede usar para eso :-). El dbus deamon por usuario se inicia cuando un usuario inicia sesión en un entorno de escritorio y finaliza cuando el usuario cierra sesión (consulte la página de manual dbus-launchy la opción --exit-with-session). Se puede iniciar un servicio dbus junto con la instancia dbus o cuando la interfaz del servicio se llama por primera vez a través de dbus. Cada usuario puede tener sus propias especificaciones de servicios dbus, definidas en un directorio oculto en la página de inicio de los usuarios, o globalmente /etc. Consulte la página de inicio de dbus en freedesktop para obtener mucha documentación e implementación de referencia.

Solo uso distribuciones basadas en Debian en estos días. Todos ellos tienen scripts en los /etc/X11/Xsession.dque muy a menudo se modifica una cadena que al final se evaluará como el comando que inicia el entorno de escritorio seleccionado. Hay uno de esos scripts para dbus, que antepone el comando con el contenedor dbus dbus-launch. Este contenedor lanza un servidor dbus y al menos en Debian vainilla (y estoy dispuesto a decir "en todas las distribuciones basadas en Debian") dbus-launchtiene la opción --exit-with-session.

Debería poder ajustar los procesos que desea ejecutar mientras un usuario inicia sesión en un servicio dbus y IIRC dbus se encarga automáticamente de finalizar sus servicios antes de salir.


2

Si está utilizando BASH como su shell, puede intentar hacer alguna detección en ~ / .bash_logout y cerrar el proceso de ejecución.

Lo que probablemente está buscando en el plazo más largo está interactuando (por ejemplo, a través de D-Bus) con algo como ConsoleKit o de systemd logind .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.