J'ai téléchargé node.js exécutable. Comment puis-je exécuter ce fichier exécutable en tant que service Windows?.
Tard à la fête, mais node-windows fera aussi l'affaire.
Il a également une journalisation système intégrée.
Il existe une API pour créer des scripts à partir de code, c'est-à-dire.
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: Je suis l'auteur de ce module.
WinSer est un wrapper convivial de node.js autour du populaire NSSM (Non-Sucking Service Manager)
J'ai trouvé la chose tellement utile que j'ai construit un wrapper encore plus facile à utiliser ( npm , github ).
L'installer:
npm install -g qckwinsvc
Installer votre service:
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
Désinstallation de votre service:
qckwinsvc --uninstall
Prompt: Service name: [name of your service]
Prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled
Ensuite, je voulais héberger un nœud en tant que service, tout comme IIS. Par ici il démarre avec ma machine, s’exécute en arrière-plan, redémarre automatiquement s'il se bloque et ainsi de suite.
C’est là que nssm , le gestionnaire de services non aspirant, entre le. image. Cet outil vous permet d’héberger un fichier .exe normal en tant que service Windows.
Voici les commandes que j'ai utilisées pour configurer une instance de votre noeud application en tant que service, ouvrez votre cmd en tant qu’administrateur et tapez commandes suivantes:
nssm.exe install service_name c:\your_nodejs_directory\node.exe c:\your_application_directory\server.js net start service_name
Je ne réponds pas directement à la question, mais vous propose une alternative qui pourrait également répondre à vos besoins de manière plus modeste.
Fonctionnellement, les exigences sont les suivantes:
Ces exigences peuvent être satisfaites en utilisant un gestionnaire de processus (PM) et en le démarrant au démarrage du système. Deux bons PM compatibles Windows sont:
Pour que PM démarre automatiquement, le moyen le plus simple consiste à créer une tâche planifiée avec un déclencheur "Au démarrage":
L'approche process manager + planificateur de tâches que j'ai postée il y a un an fonctionne bien avec certaines installations de service ponctuelles. Mais récemment, j'ai commencé à concevoir un système à la manière d'un micro-service, de nombreux petits services communiquant entre eux via IPC. Donc, configurer manuellement chaque service est devenu insupportable.
Dans l'objectif d'installer des services sans configuration manuelle, j'ai créé serman , un outil de ligne de commande (installer avec npm i -g serman
) pour installer un exécutable en tant que service. Tout ce dont vous avez besoin d'écrire (et d'écrire une seule fois) est un simple fichier de configuration de service avec votre exécutable. Courir
serman install <path_to_config_file>
va installer le service. stdout
et stderr
sont tous connectés. Pour plus d'informations, consultez le site Web project .
Un fichier de configuration fonctionnel est très simple, comme illustré ci-dessous. Mais il a également de nombreuses fonctionnalités utiles telles que <env>
et <persistent_env>
ci-dessous.
<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>