Em um servidor Debian, instalei o Node.js. Eu entendo como iniciar um aplicativo de massa com esta linha de comando:
node /srv/www/MyUserAccount/server/server.js
e acessá-lo no endereço 50.51.52.53:8080
(IP e porta).
Mas assim que fecho a massa, não consigo mais acessar o endereço 50.51.52.53:8080
.
Como fazer com que um aplicativo Node.js seja executado permanentemente?
Como você pode imaginar, eu sou iniciante no Linux e Node.js.
Respostas:
Embora as outras respostas resolvam o problema do OP, todas elas são exageradas e não explicam por que ele está enfrentando esse problema.
A chave é esta linha: "Eu fecho a massa, então não consigo acessar o endereço"
Quando você está conectado ao seu host remoto no Putty, você inicia um processo SSH linux e todos os comandos digitados nessa sessão SSH serão executados como filhos desse processo.
Seu problema é que, quando você fecha o Putty, sai da sessão SSH que mata esse processo e qualquer processo filho ativo. Quando você fecha a massa, inadvertidamente, mata seu servidor porque o executou em primeiro plano . Para evitar esse comportamento, execute o servidor em segundo plano anexando & ao seu comando:
O problema aqui é a falta de conhecimento do Linux e não uma pergunta sobre o nó. Para mais informações, consulte: http://linuxconfig.org/understanding-foreground-and-background-linux-processes
ATUALIZAR:
Como outros já mencionaram, o servidor do nó ainda pode morrer ao sair do terminal. Um problema comum que me deparei é que, embora o processo do nó esteja sendo executado em bg, o stdout e o stderr ainda estão apontados para o terminal. Isso significa que, se o servidor do nó gravar em console.log ou console.error, ele receberá um erro de pipe quebrado e travará. Isso pode ser evitado canalizando a saída do seu processo:
Se o problema persistir, você deve procurar coisas como tmux ou nohup , que ainda são mais robustas que as soluções específicas do nó, porque elas podem ser usadas para executar todos os tipos de processos (bancos de dados, serviços de log e outros idiomas).
Um erro comum que pode causar a saída do servidor é que, após a execução,
nohup node your_path/server.js &
você simplesmente fecha o terminal Putty com um simples clique. Emexit
vez disso, você deve usar o comando para que o servidor do nó esteja em funcionamento.fonte
&
o serviço, ainda assim, será fechado. (Acabei de testar no Debian Jesse)nohup node /srv/www/MyUserAccount/server/server.js &
nohup node myApp.js &
executou o aplicativo na bg, mas morre quando o termo foi fechado. Não sei por que embora.exit
comando para sair do terminal.Você pode instalar para sempre usando o npm assim:
E, em seguida, inicie seu aplicativo com:
Ou como serviço:
O Forever reinicia o aplicativo quando ele falha ou para por algum motivo. Para restringir as reinicializações a 5, você pode usar:
Para listar todos os processos em execução:
Observe o número inteiro entre colchetes e use-o da seguinte maneira para interromper um processo:
Reiniciar um processo em execução é:
Se você estiver trabalhando no arquivo do aplicativo, poderá usar o
-w
parâmetro para reiniciar automaticamente sempre que oserver.js
arquivo for alterado:fonte
forever start <file>
forever server.js
eforever start server.js
? Eu sei que diz que é "como um serviço", mas o que isso significa?forever server.js
, ele inicia o servidor. Se eu pressionarCtrl
+C
, o serviço será interrompido. Se eu digitarforever start server.js
, ele iniciará o serviço e, mesmo se eu pressionarCtrl
+,C
ele permanecerá aberto. Você pode executar os outros comandos mencionados acima para parar / olhar para a lista. Foi o que experimentei pelo menos.forever
módulo (v0.15.3) é vulnerável a Expressões Regulares ataques de negação de serviço e não deve ser usado: github.com/foreverjs/forever/issues/960Você pode usar o PM2 , é um gerenciador de processos de produção para aplicativos Node.js. com um balanceador de carga interno.
Instale o PM2
Iniciar uma aplicação
Se você estiver usando o express, poderá iniciar seu aplicativo como
Listando todos os processos em execução:
Ele listará todo o processo. Em seguida, você pode parar / reiniciar o serviço usando o ID ou o nome do aplicativo com o seguinte comando.
Para exibir logs
fonte
Eu recomendo procurar algo como o Forever para reiniciar o Node no caso de uma falha e lidar com daemonizing isso para você.
fonte
nohup
, sem , o nó será encerrado quando você sair da sessão ssh, se a executar dessa maneira (a menos que você esteja usando algo como screen no tmux).nohup
. Seria ótimo se pudéssemos resolver essa confusão. Mas não sei por onde começar.nohup
. Exemplo:nohup node app.js &
Se você deseja apenas executar o aplicativo do nó no terminal sempre, basta usar a tela.
Instale no ubuntu / debian:
Uso:
ctrl + a
e depoisctrl + d
demitirObter está de volta:
Uma tela:
screen -r
Se houver mais de um, você poderá listar todas as telas com:
screen -ls
E depois:
screen -r pid_number
fonte
Você poderia simplesmente usar isso
Isso manterá o aplicativo em execução e, para desligá-lo, você terá que matá-lo.
Para isso, você pode instalar
htop
e procurar o nó e depois matá-lofonte
exit
comando). Se o usuário simplesmente fechar a janela, isso poderá usar um sinal diferente deSIGHUP
finalizar o processo e, portanto, o nó será encerrado de qualquer maneira.killall node
, que mata todos os processos de nós, no meu caso apenas um.O Forever é um módulo NodeJs muito bom para fazer exatamente isso.
Instale
forever
digitando na linha de comandoEm seguida, use o seguinte comando para executar um script node.js
Você está pronto para ir. Além disso, você pode executar
para ver todos os scripts em execução. Você pode finalizar qualquer script específico digitando
onde
[pid]
é o ID do processo do script que você obterá dolist
comando. Para parar todos os scripts, você pode digitarfonte
fonte
Instalação
Você pode usar para sempre para executar scripts continuamente
para parar o serviço
fonte
Aqui está uma solução inicial que tenho usado para meus projetos pessoais:
Coloque-o em
/etc/init/node_app_daemon.conf
:Isso também lidará com o reaparecimento do seu aplicativo no caso de ele travar. Desistirá de tentar reaparecer seu aplicativo se ele travar 3 ou mais vezes em menos de 15 segundos.
fonte
Durante o desenvolvimento, eu recomendo usar o nodemon . Ele reiniciará o servidor sempre que um arquivo for alterado. Como outros já apontaram, o Forever é uma opção, mas na produção tudo depende da plataforma que você está usando. Você normalmente desejará usar a maneira recomendada pelo sistema operacional de manter os serviços ativos (por exemplo, http://www.freedesktop.org/wiki/Software/systemd/ ).
fonte
nodemon
executa o comando grunhido menos que você especifique um arquivo JS servidor, então eu estou usando isso para executar mongo e nó para sempre / simultaneamenteEu sempre achei o trabalho perfeitamente bem.
Supondo que você já tenha o npm instalado, se não, basta
Então instale para sempre
Agora você pode executá-lo assim
https://codingweb.io/run-nodejs-application-background/
fonte
Primeiro instale o pm2 globalmente
então comece
fonte
Outra maneira é criar uma unidade de sistema para o seu aplicativo. crie um arquivo "XXX.service" na pasta "/ etc / systemd / system", semelhante a este:
Um benefício é que o aplicativo será executado como um serviço; ele será reiniciado automaticamente se travar.
Você também pode usar o sytemctl para gerenciá-lo:
systemctl start XXX
para iniciar o serviço,systemctl stop XXX
pará-lo esystemctl enable XXX
iniciar automaticamente o aplicativo quando o sistema inicializar.fonte
Eu espero que isso te ajude.
Na linha de comando, instale para sempre:
Crie um arquivo de exemplo:
Você pode editar o arquivo e obter resultados diretamente no seu navegador.
Você pode usar o filezilla ou qualquer editor para editar o arquivo. Execute este comando para executar o arquivo:
fonte
Não há necessidade de instalar nenhum outro pacote.
Execute este comando
server.js é o seu arquivo de servidor ou pode ser api.js
Depois disso, pressione " exit " para fechar o terminal
fonte
Eu recomendo usar o PM2, que é um gerenciador de processos para aplicativos Node.js. O PM2 fornece uma maneira fácil de gerenciar e daemonizar aplicativos (executá-los como um serviço).
consulte este link - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7
fonte
Para sempre, o pacote funcionou para mim, apenas uma coisa, depende do deep-equal , por isso, se você tiver problemas com a instalação, como:
Experimentar:
em vez de.
fonte