Risposte:
In ritardo alla festa, ma anche le finestre dei nodi faranno il trucco.
Ha anche la registrazione del sistema integrata.
Esiste un'API per creare script dal codice, ad es
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: Sono l'autore di questo modulo.
Ho trovato la cosa così utile che ho creato un wrapper ancora più facile da usare ( npm , github ).
Installandolo:
npm install -g qckwinsvc
Installazione del servizio:
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
Disinstallazione del servizio:
qckwinsvc --uninstall
prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled
WinSer è un wrapper friendly node.js attorno al famoso NSSM (Non-Sucking Service Manager)
Successivamente, volevo ospitare il nodo come servizio, proprio come IIS. In questo modo si avvia con la mia macchina, viene eseguito in background, si riavvia automaticamente in caso di crash e così via.
È qui che entra in scena nssm , il gestore del servizio senza succhiare. Questo strumento ti consente di ospitare un normale .exe come servizio di Windows.
Ecco i comandi che ho usato per configurare un'istanza dell'applicazione del nodo come servizio, aprire il cmd come amministratore e digitare i comandi seguenti:
nssm.exe install service_name c:\your_nodejs_directory\node.exe c:\your_application_directory\server.js net start service_name
Non sto affrontando direttamente la domanda, ma sto fornendo un'alternativa che potrebbe anche soddisfare le tue esigenze in modo più node.js.
Funzionalmente i requisiti sono:
Questi requisiti possono essere soddisfatti utilizzando un Process Manager (PM) e facendo avviare il Process Manager all'avvio del sistema. Due buoni PM che sono compatibili con Windows sono:
Per avviare automaticamente il PM, il modo più semplice è creare un'attività pianificata con un trigger "All'avvio":
pm2
utilizzare uno script batch all'avvio, assicurarsi di includere le variabili di ambiente o non funzionerà. Discusso qui: github.com/Unitech/pm2/issues/1079
L' approccio del gestore del processo + dell'utilità di pianificazione che ho pubblicato un anno fa funziona bene con alcune installazioni di servizi una tantum. Ma recentemente ho iniziato a progettare un sistema in un modo di micro-servizi, con molti piccoli servizi che parlano tra loro tramite IPC. Quindi la configurazione manuale di ogni servizio è diventata insopportabile.
Verso l'obiettivo di installare servizi senza configurazione manuale, ho creato serman , uno strumento da riga di comando (installa con npm i -g serman
) per installare un eseguibile come servizio. Tutto quello che devi scrivere (e scrivere solo una volta) è un semplice file di configurazione del servizio insieme al tuo eseguibile. Correre
serman install <path_to_config_file>
installerà il servizio. stdout
e stderr
sono tutti registrati. Per maggiori informazioni, dai un'occhiata al sito web del progetto .
Un file di configurazione funzionante è molto semplice, come dimostrato di seguito. Ma ha anche molte funzioni utili come <env>
e <persistent_env>
sotto.
<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>