¿Es posible mantener un proceso del servidor en ejecución después de cerrar sesión en la máquina?
Normalmente usaría screen
, tmux
o nohup
, los cuales funcionan cuando NO estoy usando ssh, pero estoy usando la máquina localmente. (También está ejecutando el escritorio Gnome).
Entonces, ¿hay alguna forma de iniciar un proceso de servidor cuando inicia sesión localmente en una máquina?
Respuesta1
A partir de systemd 230, KillUserProcesses
está habilitado de forma predeterminada:
https://github.com/systemd/systemd/commit/97e5530cf2076a2b4fc55755917262607aaa6338
Puede cambiar esto editando /etc/systemd/logind.conf
, por ejemplo, configurando KillUserProcesses=no
para deshabilitar este comportamiento globalmente o configurando KillExcludeUsers=<your-username>
para excluir su nombre de usuario de este comportamiento.
O puede solucionar este problema de forma ad hoc iniciando el proceso de su servidor usando systemd-run --scope --user <executable>
. Puede encontrar más detalles sobre esto en Example 5. Start screen as a user service
la parte inferior desystemd-ejecutar(1).
Respuesta2
Estoy ejecutando Debian Stretch y KillUserProcesses
está deshabilitado de forma predeterminada en mi sistema, pero screen
no sobreviviría al cerrar sesión. Después de un poco de experimentación, lo siguiente parece mantener la sesión de pantalla ejecutándose después de cerrar sesión localmente:
screen -m
o si desea separarse de inmediato
screen -m -d
No estoy seguro de por qué es así, pero parece funcionar para mí.
Editar:
Hice algunas pruebas más y parece que la pantalla al ejecutar un comando no sobrevive. Comencé 4 sesiones y me separé de ellas si era necesario:
Antes de cerrar sesión:
user 31365 1 0 16:20 ? 00:00:00 SCREEN -S mdc -m -d vim
user 31376 1 0 16:20 ? 00:00:00 SCREEN -S md -m -d
user 31391 1 0 16:20 ? 00:00:00 SCREEN -S mc -m vim
user 31399 1 0 16:21 ? 00:00:00 SCREEN -S m -m
Después de cerrar sesión y volver a iniciarla:
user 31376 1 0 16:20 ? 00:00:00 SCREEN -S md -m -d
user 31399 1 0 16:21 ? 00:00:00 SCREEN -S m -m
Parece que las dos instancias iniciadas con un comando terminaron durante el cierre de sesión. Me conecté a las dos sesiones restantes e inicié VIM, luego me desconecté y cerré la sesión nuevamente. Después de volver a iniciar sesión, las sesiones seguían ejecutándose y VIM seguía ejecutándose en cada sesión.