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
nohup
deberí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, ssh
vaya al cuadro remoto, luego desde allí use screen
e inicie su proceso, y puede darle screen
un 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 screen
sesió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 screen
sesión más adelante, vuelva a conectarse mediante ssh al cuadro remoto y utilícelo screen -r
para volver a conectarse. Puede utilizar screen -ls
para 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.