Réponses:
En retard à la fête, mais les fenêtres de nœuds feront également l'affaire.
Il intègre également la journalisation du système.
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.
J'ai trouvé la chose si utile que j'ai construit un wrapper encore plus facile à utiliser ( npm , github ).
L'installer:
npm install -g qckwinsvc
Installation de 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ésinstaller votre service:
qckwinsvc --uninstall
prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled
WinSer est un wrapper convivial node.js autour du populaire NSSM (Non-Sucking Service Manager)
Ensuite, je voulais héberger le nœud en tant que service, tout comme IIS. De cette façon, il démarre avec ma machine, s'exécute en arrière-plan, redémarre automatiquement en cas de panne, etc.
C'est là que nssm , le gestionnaire de services non-suceur, entre en scène. Cet outil vous permet d'héberger un .exe normal en tant que service Windows.
Voici les commandes que j'ai utilisées pour configurer une instance de l'application de votre nœud en tant que service, ouvrez votre cmd comme administrateur et tapez les 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 je propose une alternative qui pourrait également répondre à vos besoins d'une manière plus node.js.
Fonctionnellement, les exigences sont:
Ces exigences peuvent être satisfaites en utilisant un gestionnaire de processus (PM) et en faisant démarrer le gestionnaire de processus au démarrage du système. Deux bons PM compatibles avec Windows sont:
Pour que le PM démarre automatiquement, le moyen le plus simple est de créer une tâche planifiée avec un déclencheur «Au démarrage»:
pm2
utiliser un script batch au démarrage, assurez-vous d'inclure les variables d'environnement sinon cela ne fonctionnera pas. Discuté ici: github.com/Unitech/pm2/issues/1079
L' approche gestionnaire de processus + planificateur de tâches que j'ai publiée il y a un an fonctionne bien avec certaines installations de service ponctuelles. Mais récemment, j'ai commencé à concevoir un système sous la forme d'un micro-service, avec de nombreux petits services qui se parlent via IPC. Donc, configurer manuellement chaque service est devenu insupportable.
Dans le but d'installer des services sans configuration manuelle, j'ai créé serman , un outil en ligne de commande (installer avec npm i -g serman
) pour installer un exécutable en tant que service. Tout ce dont vous avez besoin pour écrire (et n'écrire qu'une seule fois) est un simple fichier de configuration de service avec votre exécutable. Courir
serman install <path_to_config_file>
installera le service. stdout
et stderr
sont tous enregistrés. Pour plus d'informations, consultez le site Web du projet .
Un fichier de configuration fonctionnel est très simple, comme illustré ci-dessous. Mais il possède é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>