Processo java ainda está sendo morto

11

Eu preciso executar um programa em java nos meus servidores da universidade. Estou logando remotamente através de seus servidores via ssh

Então eu usei nohup assim:

nohup java -jar project.jar &

No entanto, quando faço o logout e fecho o terminal, entro novamente no servidor, o processo está ausente / foi eliminado.

    
por bigubosu 16.04.2014 / 16:02

4 respostas

15

nohup apenas torna o programa imune a SIGHUP e SIGQUIT signal. O shell moderno talvez envie outros sinais quando você sair da sua sessão, portanto, não há garantia de que seu programa não seja executado, mesmo sendo executado em nohup .

A melhor solução é usar tmux ou screen ou, se você usar bash , pode tentar:

$ java -jar project.jar &
$ disown
    
por 16.04.2014 / 16:19
13

Ainda outra opção no lugar do (cronicamente disfuncional) nohup :

setsid java -jar project.jar </dev/zero &>/dev/null &

Isso efetivamente "daemoniza" o processo. Agora ele é propriedade do init, portanto, nunca obterá HUP'd, seus fluxos de E / S estarão seguros e foi colocado em segundo plano.

Veja man setsid para mais informações. Ao contrário de screen ou tmux , este não é um programa que reivindica propriedade e continua a ser executado. Ele simplesmente inicia um programa em seu próprio grupo de processos .

    
por 16.04.2014 / 16:29
3

Outra ideia seria usar o comando screen. É possível iniciar um programa com a tela, desconectar e logout. Depois disso, você pode fazer login e anexar a sessão da tela em execução.

Tutorial: link

    
por 16.04.2014 / 16:09
-2

Tente executar o seu nohup com o redirecionamento STDOUT e STDERR para null:

nohup java -jar project.jar 2>&1 &
    
por 16.04.2014 / 16:15

Tags