¿Cómo instalar node.js como servicio de Windows?

130

He descargado el ejecutable node.js. ¿Cómo puedo ejecutar ese ejecutable como servicio de Windows? No puedo usar el instalador estándar node.js, ya que necesito ejecutar varias versiones de node.js simultáneamente.

TENNESSE.
fuente

Respuestas:

187

Tarde a la fiesta, pero las ventanas de nodo también harán el truco.

ingrese la descripción de la imagen aquí

También tiene un sistema de registro incorporado.

ingrese la descripción de la imagen aquí

Hay una API para crear scripts a partir del código, es decir

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: Soy el autor de este módulo.

Corey
fuente
3
segundo que "impresionante". Acabo de seguir sus instrucciones de léame y funcionó directamente, ¡muy raro! solo una cosa que quizás desee agregar al archivo Léame: cómo ejecutar el script js creado en la CLI: ie> node set_up_win_service.js ...
mike rodent
@Corey ¿De alguna manera puedo ejecutar el paquete JXCore como servicio usando este módulo?
Madhur
@Madhur - Teóricamente, podría funcionar, pero no tengo ni planeo probarlo. node-windows usa un archivo wrapper.js que es responsable de monitorear / reiniciar. Sin embargo, esto solo inicia el script de nodo como un proceso secundario. También es posible configurar la ruta ejecutable (es decir, jx en lugar de nodo). Entonces, en teoría, probablemente podrías hacer esto, pero no tengo idea de qué tipo de peculiaridades podrías encontrar.
Corey
@Corey Tengo una aplicación Http Node simple pero parece que no puede seguir funcionando con este servicio. Se instala y comienza bien, pero se detiene inmediatamente. Cualquier ayuda sería muy apreciada señor! El visor de eventos no muestra errores, pero sí una advertencia: Proceso secundario [50732 - C: \ Archivos de programa \ nodejs \ node.exe --armonía "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] finalizado con 0
Mechkov
@Mechkov: terminar con un 0 significa una salida exitosa. ¿Se puede ejecutar el script con éxito sin nodo-windows?
Corey
40

Lo encontré tan útil que construí un envoltorio aún más fácil de usar ( npm , github ).

Instalarlo:

npm install -g qckwinsvc

Instalando su servicio:

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

Desinstalar su servicio:

qckwinsvc --uninstall

prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled
Hariram Nandagopal
fuente
Gracias muy facil !! raro, funciona para mí (ganar 10 64 bits)
Furkan
“Npm ERR! asyncWrite no es una función "" npm ERR! pna.nextTick no es una función ”
Timwi
Gracias, esto es muy fácil de usar.
Enrique Flores
27

WinSer es un contenedor amigable de node.js alrededor del popular NSSM (Non-Sucking Service Manager)

Predrag Stojadinović
fuente
no me gusta NSSM porque asume que no es succión porque maneja el bloqueo de la aplicación alojada, por lo que en realidad es la succión de la aplicación alojada. En general, no me gusta culpar a Microsoft solo porque es Microsoft.
Felice Pollano
2
@FelicePollano NSSM asume que no succiona porque monitorea la aplicación alojada, en contraste con otras soluciones como srvany que dejan el servicio en un estado de ejecución, incluso si el proceso finaliza.
Jürgen Steinblock
@ JürgenSteinblock esto es exactamente lo que dije: es la succión de la aplicación alojada, no el administrador del servicio en sí mismo
Felice Pollano
2
@FelicePollano una salida de aplicación alojada no significa que algo malo significa. El punto es: NSSM refleja (o puede reflejar si está configurado correctamente) el estado real del servicio para que el servicio pueda ser monitoreado en lugar de simplemente asumir un estado de ejecución como otros gerentes de servicios (como usuario puedo matar el proceso alojado y srvary aún mostraría El servicio en estado de ejecución).
Jürgen Steinblock
16

De este blog

A continuación, quería alojar el nodo como un servicio, al igual que IIS. De esta manera, se iniciará con mi máquina, se ejecutará en segundo plano, se reiniciará automáticamente si falla y así sucesivamente.

Aquí es donde nssm , el administrador de servicios que no aspira, entra en escena. Esta herramienta le permite alojar un .exe normal como un servicio de Windows.

Estos son los comandos que utilicé para configurar una instancia de la aplicación de su nodo como servicio, abra su cmd como administrador y escriba los siguientes comandos:

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

No estoy abordando la pregunta directamente, sino brindando una alternativa que también podría cumplir con sus requisitos de una manera más node.js.

Funcionalmente los requisitos son:

  1. Tener la lógica (aplicación) ejecutándose en segundo plano
  2. Poder iniciar / detener la lógica
  3. Iniciar automáticamente la lógica cuando el sistema se inicia

Estos requisitos pueden satisfacerse utilizando un administrador de procesos (PM) y haciendo que el administrador de procesos se inicie al iniciar el sistema. Dos buenos PM que son compatibles con Windows son:

Para que el PM se inicie automáticamente, la forma más simple es crear una tarea programada con un activador "Al inicio":

ingrese la descripción de la imagen aquí

KFL
fuente
Si intenta comenzar a pm2utilizar un script por lotes al inicio, asegúrese de incluir las variables de entorno o no funcionará. Discutido aquí: github.com/Unitech/pm2/issues/1079
impulsado por vapor
@ SteamPower ¿cómo dar la ruta PM2_Home?
charan tej
0

El enfoque de administrador de procesos + planificador de tareas que publiqué hace un año funciona bien con algunas instalaciones de servicio únicas. Pero recientemente comencé a diseñar un sistema de microservicio, con muchos servicios pequeños que se comunican entre sí a través de IPC. Por lo tanto, configurar manualmente cada servicio se ha vuelto insoportable.

Con el objetivo de instalar servicios sin configuración manual, creé serman , una herramienta de línea de comandos (instalar con npm i -g serman) para instalar un ejecutable como servicio. Todo lo que necesita escribir (y solo escribir una vez) es un archivo de configuración de servicio simple junto con su ejecutable. correr

serman install <path_to_config_file>

instalará el servicio stdouty stderrestán todos registrados. Para obtener más información, consulte el sitio web del proyecto .

Un archivo de configuración de trabajo es muy simple, como se demuestra a continuación. Pero también tiene muchas características útiles como <env>y a <persistent_env>continuación.

<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
fuente