Como instalar o node.js como serviço do Windows?

130

Fiz o download do executável node.js. Como posso executar esse executável como serviço do Windows? Não consigo usar o instalador do node.js. padrão, pois preciso executar várias versões do node.j simultaneamente.

TN.
fonte

Respostas:

187

Tarde para a festa, mas as janelas do também farão o truque.

insira a descrição da imagem aqui

Ele também possui o log do sistema incorporado.

insira a descrição da imagem aqui

Existe uma API para criar scripts a partir do código, ou seja,

var Service = require('node-windows').Service;

// Create a new service object
var svc = new Service({
  name:'Hello World',
  description: 'The nodejs.org example web server.',
  script: 'C:\\path\\to\\helloworld.js'
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

svc.install();

FD: Eu sou o autor deste módulo.

Corey
fonte
3
segundo que "incrível". Acabei de seguir suas instruções Leiame e funcionou direto da caixa - muito raro! apenas uma coisa que você pode querer adicionar ao readme: como executar o script js criado no CLI: ie> nó set_up_win_service.js ...
mike roedor
@ Corey de alguma maneira eu posso executar o pacote JXCore como um serviço usando este módulo?
Madhur
@ Madhur - Teoricamente, pode funcionar, mas eu não tenho e não pretendo testá-lo. O node-windows usa um arquivo wrapper.js responsável pelo monitoramento / reinicialização. Isso apenas inicia o script do nó como um processo filho. Também é possível configurar o caminho do executável (por exemplo, jx em vez de nó). Então, teoricamente, você provavelmente poderia fazer isso, mas não tenho idéia de que tipo de peculiaridades você poderia encontrar.
Corey
@ Corey Eu tenho um aplicativo Http Node simples, mas ele não parece continuar funcionando usando este serviço. Ele instala e começa bem, mas para imediatamente. Qualquer ajuda seria muito apreciada, senhor! O visualizador de eventos não mostra erros, mas um aviso: Processo filho [50732 - C: \ Arquivos de Programas \ nodejs \ node.exe --harmony "C: \ Usuários \ bmechkov \ AppData \ Roaming \ npm \ node_modules \ node-windows \ lib \ wrapper.js "-f" C: \ dev \ Node \ abs_tips \ server.js "-l" DICAS NODE ABS "-g 0,25 -w 1 -r 3 -an] finalizadas com 0
Mechkov
@Mechkov - Terminar com um 0 significa uma saída bem-sucedida. Você pode executar o script com sucesso sem janelas do nó?
Corey
40

Achei a coisa tão útil que criei um wrapper ainda mais fácil de usar ( npm , github ).

Instalando-o:

npm install -g qckwinsvc

Instalando seu serviço:

qckwinsvc

prompt: Service name: [name for your service]
prompt: Service description: [description for it]
prompt: Node script path: [path of your node script]
Service installed

Desinstalando seu serviço:

qckwinsvc --uninstall

prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled
Hariram Nandagopal
fonte
Obrigado, muito fácil !! quarky, ele funciona para mim (win 10 64 bit)
Furkan
“Npm ERR! asyncWrite não é uma função ”“ npm ERR! pna.nextTick não é uma função ”
Timwi
Obrigado, isso é muito fácil de usar.
Enrique Flores
27

O WinSer é um empacotador amigável do node.js. em torno do popular NSSM (Non-Sucking Service Manager)

Predrag Stojadinović
fonte
não gosta do NSSM porque assume que não é de sucção porque lida com a falha do aplicativo hospedado; na verdade, é a sucção do aplicativo hospedado. Em geral, não gosto de culpar a Microsoft apenas porque é a Microsoft.
Felice Pollano
2
O @FelicePollano NSSM supõe que não seja uma sucção porque monitora o aplicativo hospedado, em contraste com outras soluções, como srvany, que deixam o serviço em um estado de execução, mesmo que o processo finalizado morra.
Jürgen Steinblock
@ JürgenSteinblock é exatamente o que eu disse: é o aplicativo hospedado sugando, não o gerenciador de serviços em si
Felice Pollano
2
@FelicePollano, uma saída de aplicativo hospedado nem sempre significa algo ruim. O ponto é: o NSSM reflete (ou pode refletir se configurado corretamente) o estado real do serviço, para que o serviço possa ser monitorado em vez de apenas assumir um estado em execução como outros gerentes de serviço (como um usuário, eu posso matar o processo hospedado e o srvary ainda mostraria o serviço em um estado de execução).
Jürgen Steinblock
16

Deste blog

Em seguida, eu queria hospedar o nó como um serviço, assim como o IIS. Dessa forma, ele iniciaria com minha máquina, rodaria em segundo plano, reiniciaria automaticamente se travar e assim por diante.

É aqui que o nssm , o gerente de serviços que não sugam, entra em cena. Essa ferramenta permite que você hospede um .exe normal como um serviço do Windows.

Aqui estão os comandos que usei para configurar uma instância do aplicativo do nó como um serviço, abra o cmd como administrador e digite os seguintes comandos:

nssm.exe install service_name c:\your_nodejs_directory\node.exe c:\your_application_directory\server.js
net start service_name
Michael Horojanski
fonte
14

Não estou abordando a questão diretamente, mas fornecendo uma alternativa que também pode atender aos seus requisitos de uma maneira mais node.js.

Funcionalmente, os requisitos são:

  1. Tenha a lógica (aplicativo) em execução em segundo plano
  2. Ser capaz de iniciar / parar a lógica
  3. Iniciar automaticamente a lógica quando o sistema inicializar

Esses requisitos podem ser satisfeitos usando um gerenciador de processos (PM) e iniciando o gerenciador de processos na inicialização do sistema. Duas PMs boas que são compatíveis com o Windows são:

Para fazer o PM iniciar automaticamente, a maneira mais simples é criar uma tarefa agendada com o gatilho "Na inicialização":

insira a descrição da imagem aqui

KFL
fonte
Se você tentar começar a pm2usar um script em lotes na inicialização, inclua as variáveis ​​de ambiente ou elas não funcionarão. Discutido aqui: github.com/Unitech/pm2/issues/1079
steampowered
@steampowered como dar o caminho PM2_Home?
precisa saber é
0

A abordagem do gerenciador de processos + agendador de tarefas que publiquei há um ano funciona bem com algumas instalações de serviços pontuais. Recentemente, porém, comecei a projetar o sistema de maneira microsserviços, com muitos pequenos serviços conversando via IPC. Portanto, a configuração manual de cada serviço se tornou insuportável.

Com o objetivo de instalar serviços sem configuração manual, criei o serman , uma ferramenta de linha de comando (instale com npm i -g serman) para instalar um executável como serviço. Tudo o que você precisa escrever (e escrever apenas uma vez) é um arquivo de configuração de serviço simples, juntamente com o seu executável. Corre

serman install <path_to_config_file>

instalará o serviço. stdoute stderrestão todos registrados. Para mais informações, consulte o site do projeto .

Um arquivo de configuração de trabalho é muito simples, como demonstrado abaixo. Mas também possui muitos recursos úteis, como <env>e <persistent_env>abaixo.

<service>
  <id>hello</id>
  <name>hello</name>
  <description>This service runs the hello application</description>

  <executable>node.exe</executable>

  <!-- 
       {{dir}} will be expanded to the containing directory of your 
       config file, which is normally where your executable locates 
   -->
  <arguments>"{{dir}}\hello.js"</arguments>

  <logmode>rotate</logmode>

  <!-- OPTIONAL FEATURE:
       NODE_ENV=production will be an environment variable 
       available to your application, but not visible outside 
       of your application
   -->
  <env name="NODE_ENV" value="production"/>

  <!-- OPTIONAL FEATURE:
       FOO_SERVICE_PORT=8989 will be persisted as an environment
       variable machine-wide.
   -->
  <persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>
KFL
fonte