Respuestas:
Tarde a la fiesta, pero las ventanas de nodo también harán el truco.
También tiene un sistema de registro incorporado.
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.
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
WinSer es un contenedor amigable de node.js alrededor del popular NSSM (Non-Sucking Service Manager)
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
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:
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":
pm2
utilizar 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
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 stdout
y stderr
está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>