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 nohup
comando de mi .profile
. De esta manera, el proceso se inicia al inicio y solo se inicia una vez (incluso con varios rxvt
té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).
fuente
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-launch
y 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.d
que 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 dbusdbus-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-launch
tiene 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.
fuente
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 .
fuente