Como desconectar um trabalho bash em execução do shell no Linux?

1

Eu tenho um script que inicia um servidor em uma VM remota. Tudo funciona muito bem até eu fechar o shell onde executei o script. Quando o shell é fechado, o mesmo acontece com o servidor. Depois de alguns olhar ao redor, encontrei o seguinte:

  1. & enviará o trabalho para o segundo plano quando executado com o símbolo
  2. disown -h desconectará o trabalho do shell e permitirá que ele seja executado, independentemente do shell.

O comando que eu usei é:

./startServer.sh nasb_wxscat160_catalog-4.1.6 1.0.8 > catalog-log.txt & disown -h

Quando fechei o shell e verifiquei usando ps -ef | grep java para ver se o trabalho ainda está funcionando, eu o vi na lista. No entanto, quando tentei me conectar ao servidor, ele não estava respondendo.

Em uma inspeção mais profunda, o arquivo de log foi preenchido até que eu fechei o shell e, usando o sinalizador ps -m , digo que os trabalhos de processo não estavam funcionando.

Alguém encontrou alguma coisa desse tipo?

    
por raven 10.12.2012 / 08:42

2 respostas

2

Para tarefas pontuais que não se daemonizam, geralmente as executo em uma sessão de tela. A desvantagem é que você precisa iniciar a tela antes de iniciar o trabalho. Meu processo geralmente é algo assim:

% screen -D -R   # start a new screen session, with reattachment options
% command_to_run_job
ctrl-A ctrl-D

Isso executará o trabalho em primeiro plano e, em seguida, será removido da sessão de tela. Então você pode sair, e depois se reconectar a ele com outra "tela -D -R"

    
por 10.12.2012 / 08:50
0

A outra coisa que você pode fazer é usar supervisord ou circus para executar seu programa e garantir que ele seja reiniciado automaticamente se ele parar.

link

    
por 10.12.2012 / 11:12