Comment faire pour installer nœud.js comme service windows?
6 réponses
en retard à la fête, mais noeud-windows fera l'affaire aussi.
il a également l'enregistrement de système intégré.
il y a une API pour créer des scripts à partir du code, i.e.
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 noeud.js amical wrapper autour de la populaire NSSM (Non-Sucer Service Manager)
j'ai trouvé la chose tellement utile que j'ai construit un enveloppeur encore plus facile à utiliser ( npm , github ).
installation:
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
ensuite, je voulais héberger node comme un service, tout comme IIS. De cette façon il démarre avec ma machine, tourne en arrière-plan, redémarre automatiquement si elle s'écrase et ainsi de suite.
C'est ici que nssm , le gestionnaire de service non-sucking, entre image. Cet outil vous permet d'héberger une normale .exe 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 comme 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 n'aborde pas la question directement, mais en fournissant une alternative qui pourrait également répondre à votre exigence dans un noeud plus.js façon.
du point de vue fonctionnel, les prescriptions sont les suivantes:
- la logique (app) en cours d'exécution en arrière-plan
- pouvoir démarrer/arrêter la logique
- démarrer Automatiquement la logique lorsque le système démarre
ces exigences peut être satisfait en utilisant un gestionnaire de processus (PM) et faire démarrer le gestionnaire de processus au démarrage du système. Deux bonnes règles qui sont Windows-friendly sont:
pour faire démarrer le PM automatiquement, le moyen le plus simple est de créer une tâche programmée avec un déclencheur "au démarrage":
Le gestionnaire de processus + planificateur de tâches approche que j'ai posté il y a un an fonctionne bien avec certains de service des installations. Mais récemment, j'ai commencé à concevoir le système de façon micro-service, avec de nombreux petits services se parlant les uns aux autres via IPC. La configuration manuelle de chaque service est donc devenue insupportable.
vers l'objectif d'installer des services sans configuration manuelle, j'ai créé serman , une commande outil de ligne de l'installer avec npm i -g serman
) pour installer un exécutable en tant que service. Tout ce dont vous avez besoin pour écrire (et écrire seulement une fois) est un simple fichier de configuration de service avec votre exécutable. Run
serman install <path_to_config_file>
installera le service. stdout
et stderr
sont toutes enregistrées. Pour plus d'informations, consultez le site du projet .
un fichier de configuration de travail est très simple, comme démontré ci-dessous. Mais il a également a de nombreuses caractéristiques 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>