Come installare node.js come servizio di Windows?


130

Ho scaricato il file eseguibile node.js. Come posso eseguire quel file eseguibile come servizio di Windows? Non riesco a utilizzare il programma di installazione standard node.js, poiché devo eseguire contemporaneamente più versioni di node.js.

Risposte:


187

In ritardo alla festa, ma anche le finestre dei nodi faranno il trucco.

inserisci qui la descrizione dell'immagine

Ha anche la registrazione del sistema integrata.

inserisci qui la descrizione dell'immagine

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.


3
secondo che "fantastico". Ho appena seguito le tue istruzioni per il readme e ha funzionato immediatamente, molto raro! solo una cosa che potresti voler aggiungere al readme: come eseguire lo script js creato nella CLI: ie> node set_up_win_service.js ...
mike rodent,

@Corey in qualche modo posso eseguire il pacchetto JXCore come servizio usando questo modulo?
Madhur,

@Madhur - Teoricamente, potrebbe funzionare, ma non ho e non ho intenzione di testarlo. node-windows utilizza un file wrapper.js che è responsabile del monitoraggio / riavvii. Questo però avvia lo script del nodo come processo figlio. È anche possibile configurare il percorso eseguibile (cioè jx anziché nodo). Quindi, teoricamente, potresti probabilmente farlo, ma non ho idea di che tipo di stranezze potresti incontrare.
Corey,

@Corey Ho una semplice app Http Node ma non riesco a rimanere in esecuzione utilizzando questo servizio. Si installa e si avvia bene, ma si arresta immediatamente. Qualsiasi aiuto sarebbe molto apprezzato signore! Il visualizzatore eventi non mostra errori, ma un avviso: Processo figlio [50732 - C: \ Programmi \ nodejs \ node.exe --harmony "C: \ Users \ bmechkov \ AppData \ Roaming \ npm \ node_modules \ node-windows \ lib \ wrapper.js "-f" C: \ dev \ Node \ abs_tips \ server.js "-l" NODE ABS TIPS "-g 0.25 -w 1 -r 3 -an] terminato con 0
Mechkov

@Mechkov - Terminare con uno 0 significa un'uscita riuscita. Riesci a eseguire lo script correttamente senza nodo-windows?
Corey,

40

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

Grazie molto semplice !! stranamente, funziona per me (vinci 10 64 bit)
Furkan

“Npm ERR! asyncWrite non è una funzione ”“ npm ERR! pna.nextTick non è una funzione ”
Timwi

Grazie, è molto facile da usare.
Enrique Flores,

27

WinSer è un wrapper friendly node.js attorno al famoso NSSM (Non-Sucking Service Manager)


non mi piace NSSM perché presume che sia Non-Succhiante perché gestisce l'arresto anomalo dell'applicazione ospitata, quindi in realtà è l'aspirazione dell'applicazione ospitata. Non mi piace in generale dare la colpa a Microsoft solo perché è Microsoft.
Felice Pollano,

2
@FelicePollano NSSM presume che sia Non-Succhiante perché monitora l'applicazione ospitata, al contrario di altre soluzioni come Srvany che lasciano il servizio in uno stato di esecuzione, anche se il processo di wrapping muore.
Jürgen Steinblock,

@ JürgenSteinblock questo è esattamente quello che ho detto: è l'applicazione succhia ospitata, non il gestore del servizio stesso
Felice Pollano

2
@FelicePollano un'uscita di un'applicazione ospitata non significa che qualcosa di cattivo. Il punto è: NSSM riflette (o può riflettere se configurato correttamente) lo stato reale del servizio in modo che il servizio possa essere monitorato invece di assumere semplicemente uno stato in esecuzione come altri gestori di servizi (come un utente che posso uccidere il processo ospitato e Srvary mostrerebbe comunque il servizio in esecuzione).
Jürgen Steinblock,

16

Da questo blog

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

14

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:

  1. Avere la logica (app) in esecuzione in background
  2. Essere in grado di avviare / arrestare la logica
  3. Avvia automaticamente la logica all'avvio del sistema

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":

inserisci qui la descrizione dell'immagine


Se si tenta di iniziare a pm2utilizzare uno script batch all'avvio, assicurarsi di includere le variabili di ambiente o non funzionerà. Discusso qui: github.com/Unitech/pm2/issues/1079
steampowered

@steampowered come dare il percorso PM2_Home?
charan tej,

0

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. stdoute stderrsono 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.