644 votes

Comment exécuter une application node.js en tant que service d'arrière-plan ?

Comme cet article a suscité beaucoup d'attention au fil des ans, j'ai dressé la liste des principales solutions par plateforme au bas de cet article.


Poste original :

Je veux que mon serveur node.js fonctionne en arrière-plan, c'est-à-dire que lorsque je ferme mon terminal, je veux que mon serveur continue à fonctionner. J'ai cherché sur Google et j'ai trouvé ceci tutoriel mais il ne fonctionne pas comme prévu. Donc, au lieu d'utiliser ce démon script, j'ai pensé utiliser la redirection de sortie (le bouton 2>&1 >> file ), mais elle ne se termine pas non plus - j'obtiens une ligne vide dans mon terminal, comme si elle attendait une sortie/des erreurs.

J'ai également essayé de mettre le processus en arrière-plan, mais dès que je ferme mon terminal, le processus est également tué.

Alors comment puis-je le laisser fonctionner lorsque j'éteins mon ordinateur local ?


Meilleures solutions :

3 votes

Je pense qu'il voulait dire éteindre son système local.

65 votes

Il voulait dire que la fermeture d'une session ssh termine la tâche

6 votes

github.com/Unitech/pm2 est un gestionnaire de processus hautement maintenu et très stable, essayez-le !

249voto

NG. Points 12989

UPDATE - Comme mentionné dans l'une des réponses ci-dessous, PM2 a des fonctionnalités très intéressantes qui manquent à jamais. Pensez à l'utiliser.

Réponse originale

Utilisez nohup :

nohup node server.js &

EDITAR Je voulais ajouter que la réponse acceptée est vraiment la voie à suivre. J'utilise forever sur les instances qui doivent rester en place. J'aime faire npm install -g forever pour qu'il soit dans le chemin du noeud et ensuite juste faire forever start server.js

150 votes

C'est cool de le savoir : nohup signifie no hangup qui vient de l'ancien temps, où l'on voulait garder un processus en vie lorsque l'on "raccrochait" son modem.

1 votes

Aujourd'hui, c'est plutôt le nom du signal 1 que les processus reçoivent pour avertir que l'utilisateur a fermé le shell (ou perdu la connexion du modem, bien sûr :P)

7 votes

Ce n'est pas la meilleure solution car si l'application rencontre une erreur non attrapée, le processus du nœud se terminera et ne redémarrera pas. Néanmoins, c'est une option raisonnable pour le développement.

248voto

muzz Points 1819

Vous pouvez utiliser Forever, un outil CLI simple pour garantir qu'un nœud donné script s'exécute en continu (c'est-à-dire pour toujours) : https://www.npmjs.org/package/forever

6 votes

Avec le dernier nœud, je n'ai pas pu obtenir qu'il arrête une application via le nom script (erreur) - également - mauvais comportement général (était sur OS-X) - tous construits à partir des sources, curieusement. Cela a laissé les choses dans un mauvais état et ne m'a pas donné confiance.

4 votes

Bien que nohup fasse l'affaire, forever est une meilleure solution car il démonétise le processus. Excellent outil !

5 votes

À propos, un tutoriel plus simple est disponible ici : Maintenir un serveur node.js à jour avec Forever

77voto

UltimateBrent Points 6167

Ce n'est peut-être pas la méthode habituelle, mais je le fais avec l'écran, surtout en cours de développement, car je peux le remonter et le modifier si nécessaire.

screen
node myserver.js
>>CTRL-A then hit D

L'écran se détachera et survivra à votre déconnexion. Vous pourrez alors le récupérer en faisant screen -r. Consultez le manuel de screen pour plus de détails. Vous pouvez nommer les écrans et autres si vous le souhaitez.

3 votes

Aussi, tmux est sympa. Fonctionne comme l'écran (CTRL-B est par défaut au lieu de CTRL-A, mais est configurable). Tmux a des panneaux (écrans divisés).

0 votes

Je l'utilise depuis quelques semaines pour une application Meteor. `$screen -dr' pour détacher et rattacher pourrait être nécessaire de temps en temps.

0 votes

Pour moi, c'est le moyen le plus simple de faire le travail. Mais je suis d'accord, ce n'est pas la meilleure solution

71voto

Corey Points 705

Mise à jour de 2016 : La série node-Windows/mac/linux utilise une API commune à tous les systèmes d'exploitation, c'est donc une solution tout à fait pertinente. Cependant, node-linux génère des fichiers init systemv. Comme systemd continue de croître en popularité, c'est de façon réaliste une meilleure option sur Linux. Les RP sont les bienvenus si quelqu'un veut ajouter le support de systemd à node-linux :-)

Sujet original :

C'est un vieux sujet maintenant, mais nœud-Windows fournit un autre moyen de créer des services d'arrière-plan sous Windows. Il est vaguement basé sur le nssm le concept d'utilisation d'un exe enveloppe autour de votre nœud script. Cependant, il utilise winsw.exe et fournit une enveloppe de nœud configurable pour un contrôle plus granulaire de la façon dont le processus démarre/arrête en cas d'échec. Ces processus sont disponibles comme n'importe quel autre service :

enter image description here

Le module intègre également un système d'enregistrement des événements :

enter image description here

La démonisation de votre script est accomplie par le biais du code. Par exemple :

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\\my\\node\\script.js'
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

// Listen for the "start" event and let us know when the
// process has actually started working.
svc.on('start',function(){
  console.log(svc.name+' started!\nVisit http://127.0.0.1:3000 to see it in action.');
});

// Install the script as a service.
svc.install();

Le module prend en charge des fonctions telles que le plafonnement des redémarrages (pour éviter que les mauvais scripts n'endommagent votre serveur) et l'augmentation des intervalles de temps entre les redémarrages.

Comme les services node-Windows fonctionnent comme n'importe quel autre service, il est possible de gérer/surveiller le service avec le logiciel que vous utilisez déjà.

Enfin, il n'y a pas make dépendances. En d'autres termes, un simple npm install -g node-windows fonctionnera. Vous n'avez pas besoin de Visual Studio, de .NET ou de la magie des nœuds pour l'installer. De plus, il est sous licence MIT et BSD.

Pour tout vous dire, je suis l'auteur de ce module. Il a été conçu pour soulager la douleur exacte que le PO a éprouvée, mais avec une intégration plus étroite dans la fonctionnalité que le système d'exploitation fournit déjà. J'espère que les futurs utilisateurs qui se posent la même question le trouveront utile.

11 votes

Je l'ai maintenant porté sur nœud-mac qui fournit la même fonctionnalité sous OSX.

1 votes

J'en suis arrivé au point de programmer quelques programmes Node et je dois choisir entre node-Windows, Forever ou Kue. Je penche pour node-Windows mais j'aimerais comprendre pourquoi ne pas utiliser Forever ou Kue lorsque je veux programmer et surveiller une douzaine de programmes de nœuds. Certains fonctionnent éternellement. Besoin de surveillance aussi.

6 votes

Node-Windows utilise le système d'exploitation natif pour gérer les services d'arrière-plan, et le journal des événements natif pour la journalisation. Forever a sa propre surveillance et journalisation personnalisée. J'ai écrit un article à ce sujet sur medium.com/p/2a602ea657a2 Il semble que vous deviez planifier vos scripts, et non les exécuter en permanence en tant que services d'arrière-plan. Des projets comme Kue et Agenda sont conçus pour cela. Node-Windows et Forever ont un but différent.

32voto

hutch Points 1723

UPDATE Traduction : j'ai mis à jour pour inclure la dernière version de pm2 :

pour de nombreux cas d'utilisation, l'utilisation d'un service systemd est la manière la plus simple et la plus appropriée de gérer un processus de nœud. pour ceux qui exécutent de nombreux processus de nœud ou des microservices de nœud fonctionnant indépendamment dans un environnement unique, pm2 est un outil plus complet.

https://github.com/unitech/pm2

http://pm2.io

  • il dispose d'une fonction de surveillance très utile -> un joli 'gui' pour la surveillance en ligne de commande de plusieurs processus à l'aide de pm2 monit ou la liste des processus avec pm2 list
  • gestion organisée du journal -> pm2 logs
  • d'autres choses :

    • Configuration du comportement
    • Prise en charge des cartes sources
    • Compatible avec PaaS
    • Regarder et recharger
    • Système de modules
    • Recharge maximale de la mémoire
    • Mode cluster
    • Rechargement à chaud
    • Flux de travail de développement
    • Scripts de démarrage
    • Achèvement automatique
    • Flux de travail pour le déploiement
    • Suivi de Keymetrics
    • API

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X