El proceso en segundo plano (nohup &) se suspende o se reanuda cuando el usuario cierra o inicia sesión

El proceso en segundo plano (nohup &) se suspende o se reanuda cuando el usuario cierra o inicia sesión

Servidor Ubuntu 11.10

Cuando un usuario normal (no root) inicia un proceso con nohup (nohup java...&), cuando el usuario se desconecta de la terminal (ssh) el proceso deja de responder. Cuando el usuario se conecta nuevamente, el proceso comienza a responder nuevamente. Por ejemplo, el proceso es una base de datos (H2) que deja de responder consultas cuando el usuario que inició el proceso se desconecta del terminal y comienza a responder nuevamente cuando el usuario inicia sesión nuevamente.

¿Existe algún permiso de proceso en segundo plano que no conozca y que impida que el proceso se ejecute en segundo plano? ¿Qué podría estar causando este comportamiento?

Respuesta1

nohupdebería funcionar para usted, ¿cuál fue su comando exacto? Quizás te estés perdiendo algo. Aquí hay una sección de Wikipedia al respecto:

Nohupping backgrounded jobs is typically used to avoid terminating them when logging
off from a remote SSH session. A different issue that often arises in this situation
is that ssh is refusing to log off ("hangs"), since it refuses to lose any data
from/to the background job(s).  This problem can also be overcome by redirecting all
three I/O streams:

nohup ./myprogram > foo.out 2> foo.err < /dev/null &

Entonces podrías hacer algo como:

ssh -n -f user@remotebox "sh -c 'cd /foo/bar; nohup ./myprogram > foo.out 2> foo.err < /dev/null &'"

O si eso todavía no funciona, puedes intentarlo screen. Le permitirá ejecutar su proceso en "segundo plano" y seguirá ejecutándose después de cerrar sesión.

Primero, sshvaya al cuadro remoto, luego desde allí use screene inicie su proceso, y puede darle screenun nombre a su sesión si lo desea. Realmente no notarás nada diferente, pero comienza tu proceso en esa sesión. Luego puede salir de la screensesión usando el comando Ctrl-a d. Se verá algo como esto:

user@remotebox:~$ screen -S foobarsession
user@remotebox:~$ startmyprocess
[detached from 4865.foobarsession]
user@remotebox:~$

Luego puede salir de su sesión ssh y el proceso seguirá ejecutándose. Para volver a conectarse a la screensesión más adelante, vuelva a conectarse mediante ssh al cuadro remoto y utilícelo screen -rpara volver a conectarse. Puede utilizar screen -lspara enumerar las sesiones.

user@remotebox:~$ screen -ls
There is a screen on:
        4865.foobarsession     (10/05/2012 11:10:57 AM)     (Detached)
1 Socket in /var/run/screen/S-user
user@remotebox:~$ screen -r foobarsession
user@remotebox:~$ screen -ls
        4865.foobarsession     (10/05/2012 11:10:57 AM)     (Attached)
1 Socket in /var/run/screen/S-user
user@remotebox:~$

Respuesta2

Los procesos iniciados con nohup ... &están diseñados para ejecutarse incluso después de que finaliza el proceso del terminal. No creo que exista un mecanismo central de Unix que suspenda tales procesos. Aunque el planificador podría cambiar su prioridad (porque podría considerarse un proceso no tan importante).

Estoy bastante seguro de que el proceso continúa ejecutándose, pero algo como una tubería lo está bloqueando e impide responder.

información relacionada