Eu me conecto ao servidor linux via putty SSH. Tentei executá-lo como um processo em segundo plano como este:
$ node server.js &
No entanto, após 2,5 horas, o terminal fica inativo e o processo morre. Existe alguma maneira de manter o processo vivo, mesmo com o terminal desconectado?
Editar 1
Na verdade, tentei nohup
, mas assim que fecho o terminal Putty SSH ou desconecto a Internet, o processo do servidor para imediatamente.
Existe algo que eu tenho que fazer em Putty?
Edit 2 (em fevereiro de 2012)
Existe um node.js
módulo para sempre . Ele executará o servidor node.js como serviço daemon.
node.js
linux
background-process
murvinlai
fonte
fonte
exit
. Quando eu fecho a janela do Putty, ele falha.Respostas:
Solução simples (se você não estiver interessado em voltar ao processo, apenas queira que ele continue em execução):
Há também o
jobs
comando para ver uma lista indexada desses processos em segundo plano. E você pode eliminar um processo em segundo plano executandokill %1
oukill %2
com o número sendo o índice do processo.Solução poderosa (permite que você se reconecte ao processo, se for interativo):
Você pode desanexar pressionando Ctrl + a + de reconectar executando
screen -r
Considere também a alternativa mais nova para a tela, o tmux.
fonte
sudo bash
.nohup node server.js > /dev/null 2>&1 &
nohup
significa: Não encerre esse processo mesmo quando o stty estiver cortado.> /dev/null
significa: stdout vai para / dev / null (que é um dispositivo fictício que não registra nenhuma saída).2>&1
significa: stderr também vai para o stdout (que já está redirecionado/dev/null
). Você pode substituir & 1 por um caminho de arquivo para manter um registro de erros, por exemplo:2>/tmp/myLog
&
no final significa: execute este comando como uma tarefa em segundo plano.fonte
/dev/null
? Agradável logging ... Boa sorte tentando depurar isso ...Você realmente deveria tentar usar
screen
. É um pouco mais complicado do que apenas fazernohup long_running &
, mas entender a tela quando você nunca mais voltar.Inicie sua sessão na tela primeiro:
Execute o que quiser:
Pressione ctrl + A e depois d. Feito. Sua sessão continua em segundo plano.
Você pode listar todas as sessões por
screen -ls
e anexar a algumas porscreen -r 20673.pts-0.srv
comando, em que 0673.pts-0.srv é uma lista de entradas.fonte
Esta é uma pergunta antiga, mas tem uma classificação alta no Google. Quase não consigo acreditar nas respostas mais votadas, porque executar um processo node.js dentro de uma sessão de tela, com
&
ou mesmo com onohup
sinalizador - todos eles - são apenas soluções alternativas.Especialmente a solução screen / tmux, que realmente deve ser considerada uma solução amadora . Screen e Tmux não são para manter os processos em execução, mas para multiplexar sessões de terminal. Tudo bem, quando você está executando um script no servidor e deseja desconectar. Mas para um servidor node.js. você não deseja que seu processo seja anexado a uma sessão de terminal. Isso é muito frágil. Para manter as coisas funcionando, você precisa daemonize o processo!
Existem muitas boas ferramentas para fazer isso.
PM2 : http://pm2.keymetrics.io/
Uma grande vantagem que vejo a favor do PM2 é que ele pode gerar o script de inicialização do sistema para fazer com que o processo persista entre as reinicializações:
Onde
platform
pode estarubuntu|centos|redhat|gentoo|systemd|darwin|amazon
.forever.js : https://github.com/foreverjs/forever
Scripts de inicialização :
Não vou entrar em detalhes sobre como escrever um script init, porque não sou especialista neste assunto e seria muito longo para essa resposta, mas basicamente são simples scripts de shell, acionados por eventos do SO. Você pode ler mais sobre isso aqui
Docker :
Basta executar o servidor em um contêiner do Docker com a
-d
opção e, voilá , você tem um servidor node.j daemonizado!Aqui está uma amostra do Dockerfile (no guia oficial node.js. ):
Em seguida, crie sua imagem e execute seu contêiner:
Espero que isso ajude alguém a chegar nesta página. Sempre use a ferramenta adequada para o trabalho. Isso vai lhe poupar muitas dores de cabeça e durante horas!
fonte
tail -f
inserindo o arquivo de log que o pm2 gera.screen
solução que muitas pessoas estão encontrando faz o trabalho é uma solução alternativa. Existem várias maneiras de realizar uma tarefa específica. Acredito que aconteça (considere a questão específica) estar cumprindo a tarefa específica derun as background and never die
excelência para muitos. Ele também tem o bônus adicional de permitir que o usuário volte a interagir novamente e faça alterações, se quiser. A chave é componentes ébackground
enever die
. Todas as soluções têm certos bônus.nohup
é a solução. É feito no Linux e é para isso que serve. É uma linha, é limpa e funciona como planejado, sempre, independentemente de atualizações. As pessoas realmente devem tentar evitar o uso de ferramentas de terceiros para casos de uso básicos como esse. O exemplo da janela de encaixe (por exemplo) é muito mais detalhado e com muitos recursos do que o único comando na resposta votada superior. Amo o Docker, mas não para isso.nohup
solução não atende ao requisito "nunca morra". A menos que você escreva umtrap
loop infinito muito complicado ou hacky, não vejo como manter o processo daemonized sem usar ferramentas especialmente escritas para esse fim (ou um script init escrito por você mesmo, é claro).outra solução negou o trabalho
fonte
nohup
permitirá que o programa continue mesmo após a morte do terminal. Na verdade, tive situações em quenohup
impede que a sessão SSH seja encerrada corretamente, portanto, você deve redirecionar a entrada também:Dependendo de como
nohup
está configurado, também pode ser necessário redirecionar a saída padrão e o erro padrão para os arquivos.fonte
Eu tenho essa função no meu arquivo shell rc, com base na resposta de @ Yoichi:
Você pode usá-lo desta maneira:
fonte
O Nohup e a tela oferecem ótimas soluções leves para executar o Node.js em segundo plano. O gerenciador de processos do Node.js. ( PM2 ) é uma ferramenta útil para implantação. Instale-o com o npm globalmente no seu sistema:
npm install pm2 -g
para executar um aplicativo Node.js como um daemon:
pm2 start app.js
Opcionalmente, você pode vinculá-lo ao Keymetrics.io, um SAAS de monitoramento feito pela Unitech.
fonte
Ele removerá o comando da lista de tarefas ativas e enviará o comando para segundo plano
fonte
Você leu sobre o comando nohup ?
fonte
Para executar o comando como um serviço do sistema no debian com sysv init:
Copie o script do esqueleto e adapte-o às suas necessidades, provavelmente tudo o que você precisa fazer é definir algumas variáveis. Seu script herdará padrões finos de
/lib/init/init-d-script
, se algo não atender às suas necessidades - substitua-o em seu script. Se algo der errado, você poderá ver detalhes na fonte/lib/init/init-d-script
. Vars obrigatórios sãoDAEMON
eNAME
. O script será usadostart-stop-daemon
para executar seu comando, poisSTART_ARGS
você pode definir parâmetros adicionaisstart-stop-daemon
para usar.É assim que eu executo algumas coisas em python no meu wiki da wikimedia:
Além de configurar vars, eu tive que substituir
do_stop_cmd
por causa de python substitui o executável, para que o serviço não parasse corretamente.fonte
Além das soluções legais acima, eu mencionaria também as ferramentas supervisord e monit que permitem iniciar o processo, monitorar sua presença e iniciá-lo se ele morrer. Com o 'monit', você também pode executar algumas verificações ativas, como verificar se o processo responde à solicitação http
fonte
Para o Ubuntu, eu uso este:
Saudações
fonte
Tente isso para uma solução simples
cmd & exit
fonte