Como você executa um aplicativo NodeJS em segundo plano sem terminar quando você efetua logout?

3

Estou tentando manter um aplicativo em meu servidor Ubuntu funcionando para que o Google tenha tempo de fazer o ping, mas o aplicativo continua sendo desligado quando eu faço logout.

Eu inicio o aplicativo Nodejs com supervisor para monitorar as alterações (por meio de um script de shell)

Eu encontrei comandos como nohup , mas eu realmente não tenho noção quando se trata de rodar serviços de segundo plano além de digitar comandos simples como service httpd start , o que parece funcionar muito bem para o Apache no CentOS!

Preciso criar outro usuário para executar serviços? Eu tenho uma instância do Linode com o Ubuntu 10.04

run.sh

cd myapp/src/main/node
supervisor -w "myapp/src/main/node,myapp2/src/main/node,./" run-apps.js
    
por qodeninja 21.09.2012 / 18:07

3 respostas

5

Tente isto:

nohup supervisor -w "myapp/src/main/node,myapp2/src/main/node,./" run-apps.js &

Algumas outras maneiras:

por 21.09.2012 / 19:53
5

A razão pela qual ele sai é porque quando você efetua logout e termina o shell pai, o script recebe um sinal HUP e perde sua capacidade de gravar em STDOUT e STDERR.

Você tem 4 opções, (em ordem de "correção" e "limpeza"):

  1. Modifique-o para ignorar um sinal HUP e registre-o de maneira limpa em um arquivo.
  2. Execute o script em uma screen session
  3. Execute o script usando nohup
  4. Crie um script bash bastante complexo que lance o script, em seguida, disown s e feche os canais STDOUT e STDERR associados.
por 21.09.2012 / 18:25
1

Aqui está outra maneira de fazer isso sem nohup : deserdar.

Por exemplo:

$ jobs
$ sleep 300 &
[1] 79844
$ jobs
[1]  + running    sleep 300
$ disown %1
$ jobs
$ pgrep sleep
79844

Explicação:

  1. Use jobs para mostrar trabalhos em segundo plano, não há nenhum
  2. Histórico sleep 300
  3. Use jobs novamente. PID para sleep é 79844 e é o job # 1
  4. Emprego desconhecido # 1
  5. Use jobs novamente. Não há trabalhos em segundo plano.
  6. Use pgrep para encontrar qualquer processo denominado sleep . Existe um, com PID 79844 (mesmo PID)

Você pode fechar o terminal e / ou efetuar logout sem afetar o trabalho rejeitado.

Isso tem a vantagem de não deixar em torno de um arquivo nohup.out , mas você também perde tudo escrito em STDOUT .

    
por 22.09.2012 / 01:49