Como usar o nohup para continuar a executar um comando após o logout do usuário?

1

nohup <command> <arg> &

Quando eu for SSH em um servidor Linux, se eu quiser executar um comando e garantir que ele continuará sendo executado em segundo plano depois de sair do SSH, usarei os comandos acima.

Recentemente, estou usando uma pilha de servidores chamada pilha Bitnami Node.js . É um pacote de software independente. Há um binário node na pasta bin no diretório de instalação.

Na linha de comando, posso usar o comando node para executar meus programas JS: node <js_program.js> . Não há problema.

Mas, gostaria de continuar a executar o programa depois de sair do SSH. Quando executo nohup <installation_dir>/nodejs/bin/node <js_program.js> > <stdout.out> & , o programa será executado em segundo plano. Mas quando eu sair do SSH, o programa também terminará imediatamente. Parece que o comando nohup não tem efeito nesse caso.

Como posso corrigir este problema?

    
por userpal 12.04.2016 / 16:59

3 respostas

0

Consegui resolver esse problema alterando a maneira como faço logout do terminal do SSH.

Em vez de clicar no botão X para fechar a janela do PuTTY, eu digito exit no terminal do SSH para efetuar o logout. Agora, o processo pode continuar sendo executado em segundo plano após o logout.

Se eu clicar no botão X para fechar a janela, o processo em segundo plano será encerrado imediatamente.

    
por 14.04.2016 / 15:49
1

Se você tiver o pacote at instalado e não for negado (diretamente por meio de /etc/at.deny ou implicitamente via /etc/at.allow ), tente usar um dos seguintes métodos:

  echo "<installation_dir>/nodejs/bin/node <js_program.js> > <stdout.out>" | at now

ou:

  at now

e especifique seu comando no prompt at> .

Isso deve agendar o comando para ser executado imediatamente por meio do daemon at .

Como eu tradicionalmente "emulei" nohup em sistemas com implementações nohup interrompidas (AIX 5.3 e anterior, por exemplo).

    
por 12.04.2016 / 17:54
1

Em exibição:

nohup command ... > file &

irá deixar stderr e stdin abertos. Em vez disso, execute:

nohup command ... > file 2>&1 <&- &

ou:

nohup command ... > logfile 2> errfile <&- &

que irá redirecionar o stdout e fechar o stdin.

Tenha em mente que seu comando pode ser anulado se não puder ler stdin.

    
por 12.04.2016 / 21:42