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
nohup
deve 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, ssh
vá para a caixa remota e, a partir daí, use screen
e inicie seu processo, e você pode fornecer screen
um nome de sessão, se desejar. Você realmente não notará nada diferente, mas inicie seu processo nessa sessão. Você pode sair da screen
sessã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 à screen
sessão mais tarde, faça ssh de volta à caixa remota e use screen -r
para reconectar. Você pode usar screen -ls
para 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.