O processo em segundo plano (nohup &) é suspenso/reiniciado quando o usuário efetua logout/login

O processo em segundo plano (nohup &) é suspenso/reiniciado quando o usuário efetua logout/login

Servidor Ubuntu 11.10

Quando um usuário normal (não root) inicia um processo com nohup (nohup java...&), quando o usuário se desconecta do terminal (ssh) o processo para de responder. Quando o usuário se conecta novamente, o processo começa a responder novamente. Por exemplo, o processo é um banco de dados (H2) que para de responder às consultas quando o usuário que iniciou o processo se desconecta do terminal e começa a responder novamente quando o usuário efetua login novamente.

Existe alguma permissão de processo em segundo plano que eu não conheço e que impede a execução do processo em segundo plano? O que poderia estar causando esse comportamento?

Responder1

nohupdeve funcionar para você, qual foi o seu comando exato? Talvez você esteja faltando alguma coisa. Aqui está uma seção da Wikipedia sobre isso:

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 &

Então você poderia fazer algo como:

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

Ou se isso ainda não funcionar, você pode tentar screen. Isso permitirá que você execute seu processo em "segundo plano" e continuará em execução após o logout.

Primeiro, sshvá para a caixa remota e, a partir daí, use screene inicie seu processo, e você pode fornecer screenum nome de sessão, se desejar. Você realmente não notará nada diferente, mas inicie seu processo nessa sessão. Você pode sair da screensessão usando o comando Ctrl-a d. Vai parecer algo assim:

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

Você pode então sair da sessão ssh e o processo continuará em execução. Para se reconectar à screensessão mais tarde, faça ssh de volta à caixa remota e use screen -rpara reconectar. Você pode usar screen -lspara listar as sessões.

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:~$

Responder2

Os processos iniciados com nohup ... &são projetados para serem executados mesmo após a saída do processo do terminal. Não creio que exista um mecanismo central do Unix que suspenda tais processos. Embora o agendador possa alterar sua prioridade (porque pode ser considerado um processo não tão importante).

Tenho certeza de que o processo continua em execução, mas algo como um cano o está bloqueando e impedindo de responder.

informação relacionada