J'ai créé un serveur http simple dans Node.js.
Je voulais le faire fonctionner en permanence sur mon ordinateur Windows 2008, afin que, si l'ordinateur redémarre, il redémarre automatiquement.
Alors j'en ai fait un service avec cette commande:
C:\Users\Administrator>sc create translate binPath= "node D:\Apps\translate\machine-learning-server\servertranslate.js" DisplayName= "Translation Server"
Puis commencé avec:
C:\Users\Administrator>sc start translate
et j'ai le message d'erreur suivant:
[SC] StartService FAILED 1053:
The service did not respond to the start or control request in a timely fashion.
Le programme fonctionne correctement lorsque je le lance à partir de la ligne de commande (pas en tant que service).
Quel est le moyen le plus simple d’avoir un serveur Web node.js qui redémarre automatiquement au redémarrage de l’ordinateur?
Auparavant, j'utilisais NSSM pour exécuter des applications Node.js en tant que services sous Windows. Cela fonctionne assez bien et peut être configuré pour redémarrer automatiquement votre application en cas de crash.
nssm install YourService "C:\Program Files\Node.js\node.exe" "C:\something\something.js"
Si je me souviens bien, l'environnement d'exécution de Service n'est pas identique à l'exécution de quelque chose sous la commande Shell. En particulier, les services sont tenus de répondre aux messages du système pour indiquer leur état d'exécution, comme vous l'avez vu :-)
Ce doit être un problème résolu, cependant ...
Bien sûr: https://npmjs.org/package/windows-service
service de fenêtres
Exécutez les programmes Node.JS en tant que services Windows natifs.
npm installer windows-service
Utilisez celui-ci, très simple https://github.com/coreybutler/node-windows
Créez deux fichiers js sur votre projet. Et courez comme
noeud votre_service.js noeud votre_service_service.js
Pour installer:
/**
* Created by sabbir on 08/18/2015.
*/
//ref: https://github.com/coreybutler/node-windows
var Service = require('node-windows').Service;
// Create a new service object
var svc = new Service({
name:'nodeDemoApp',
description: 'The nodejs.org example web server.',
script: 'D:\\NodeJS\\demoWeb\\bin\\www'
});
// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
svc.start();
});
svc.install();
Pour la désinstallation:
var Service = require('node-windows').Service;
// Create a new service object
var svc = new Service({
name:'nodeDemoApp',
script: require('path').join(__dirname,'bin\\www')
});
// Listen for the "uninstall" event so we know when it's done.
svc.on('uninstall',function(){
console.log('Uninstall complete.');
console.log('The service exists: ',svc.exists);
});
// Uninstall the service.
svc.uninstall();
En un mot, je dirais que le service ne sait pas où trouver le noeud binaire. Vous avez probablement mis à jour la variable PATH de votre profil. Ma recommandation est de TOUJOURS coder en dur le chemin complet dans les scripts de service.
Comme mentionné dans d'autres questions à ce sujet, j'aimerais partager ici (car il n'a pas encore été mentionné) un module node.js appelé WinSer qui englobe NSSM et son utilisation est très simple. Peut-être aidera-t-il quelqu'un un jour .
:)
Vous pouvez essayer le paquet qckwinsvc . Tout d'abord l'installer globalement:
npm install -g qckwinsvc
Et puis du cmd:
qckwinsvc
Prompt: Service name: [...]
Prompt: Service description: [...]
Prompt: Node script path: [/path/to/.js file]
Pour désinstaller:
qckwinsvc --uninstall