Processo em segundo plano (nohup &) suspende / continua quando o usuário efetua logout / login

4

Ubuntu Server 11.10

Quando um usuário normal (não raiz) inicia um processo com nohup (nohup java ... & amp;), quando o usuário se desconecta do terminal (ssh), o processo pára 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 a 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 não conheço que impeça a execução do processo em segundo plano? O que poderia estar causando esse comportamento?

    
por pakman 27.10.2011 / 19:47

2 respostas

7

nohup deve funcionar para você, qual foi o seu comando exato? Talvez você esteja perdendo alguma coisa. Aqui está a seção da Wikipédia 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 . Ele permitirá que você execute seu processo no "segundo plano" e continuará funcionando após o seu logout.

Primeiro, ssh para a caixa remota e, a partir daí, use screen e inicie o processo, e você poderá fornecer seu nome de sessão screen , se desejar. Você realmente não notará nada diferente, mas inicie seu processo nessa sessão. Você pode sair da sessão screen usando o comando Ctrl-a d . Será algo parecido com isto:

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

Você pode sair da sessão ssh e o processo continuará sendo executado. Para reconectar-se à sessão screen mais tarde, volte para a 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:~$
    
por tpow 05.10.2012 / 18:21
2

Os processos iniciados com nohup ... & são projetados para serem executados mesmo depois que o processo do terminal terminar. Eu não acho que exista um mecanismo principal de unix que suspenda tais processos. Embora o planejador possa alterar sua prioridade (porque pode ser considerado como um processo não tão importante).

Tenho certeza de que o processo continua a ser executado, mas algo como um canal está bloqueando-o e impede a resposta.

    
por lgarzo 27.10.2011 / 20:12