web-dev-qa-db-fra.com

Comment faire en sorte qu'une application node.js s'exécute en permanence?

Sur un serveur Debian, j'ai installé Node.js. Je comprends comment lancer une application de PuTTY avec cette ligne de commande:

node /srv/www/MyUserAccount/server/server.js

et se rendre sur l'adresse 50.51.52.53:8080 (IP et port).

Mais dès que je ferme PuTTY, je ne peux plus accéder à l'adresse 50.51.52.53:8080.

Comment faire en sorte qu'une application Node.js s'exécute en permanence?

Comme vous pouvez le deviner, je suis un débutant avec Linux et Node.js.

207
Sam

Bien que les autres réponses résolvent le problème du PO, elles sont toutes excessives et n'expliquent pas pourquoi il ou elle vit ce problème.

La clé est cette ligne, "je ferme PuTTY, alors je ne peux pas atteindre l'adresse"

Lorsque vous êtes connecté à votre hôte distant sur PuTTY, vous avez lancé un processus Linux SSH et toutes les commandes saisies à partir de cette session SSH seront exécutées en tant qu'enfants de ce processus. 

Votre problème est que lorsque vous fermez PuTTY, vous quittez la session SSH, qui tue ce processus et tous les processus enfants actifs. Lorsque vous fermez PuTTY, vous tuez votre serveur par inadvertance, car vous l'avez exécuté dans le foreground. Pour éviter ce problème, exécutez le serveur dans background en ajoutant & à votre commande: 

node /srv/www/MyUserAccount/server/server.js &

Le problème ici est un manque de connaissance de Linux et non une question de noeud. Pour plus d'informations, consultez: http://linuxconfig.org/understanding-foreground-and-background-linux-processes

METTRE À JOUR:

Comme d'autres l'ont mentionné, le serveur de noeud peut encore mourir en quittant le terminal. Un des pièges que j'ai souvent rencontrés est que même si le processus de noeud est en cours d'exécution dans bg, il est stdout et stderr est toujours pointé vers le terminal. Cela signifie que si le serveur de noeud écrit dans console.log ou console.error, il recevra une erreur de canal cassé et un crash. Cela peut être évité en canalisant la sortie de votre processus:

node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &

Si le problème persiste, consultez tmux ou Nohup, qui sont encore plus robustes que les solutions spécifiques à un noeud, car ils peuvent être utilisés pour exécuter tous les types de processus autres langues).

Une erreur courante qui pourrait entraîner la fermeture du serveur est qu’après avoir exécuté le Nohup node your_path/server.js &, vous fermez simplement le terminal PuTTY par un simple clic. Vous devez utiliser la commande exit à la place. Votre serveur de noeud sera alors opérationnel.

176
DogNibbler

Vous pouvez installer forever en utilisant npm comme ceci:

Sudo npm install -g forever

Et puis démarrez votre application avec:

forever server.js

Ou en tant que service:

forever start server.js

Pour toujours redémarre votre application quand il se bloque ou arrête pour une raison quelconque. Pour limiter les redémarrages à 5, vous pouvez utiliser:

forever -m5 server.js

Pour lister tous les processus en cours d'exécution:

forever list

Notez le nombre entier entre crochets et utilisez-le comme suit pour arrêter un processus:

forever stop 0

Redémarrer un processus en cours va:

forever restart 0

Si vous travaillez sur votre fichier d'application, vous pouvez utiliser le paramètre -w pour redémarrer automatiquement chaque fois que votre fichier server.js change:

forever -w server.js
293
N20

Vous pouvez utiliser PM2 , il s’agit d’un gestionnaire de processus de production pour les applications Node.js avec un équilibreur de charge intégré. 

Installer le PM2

$ npm install pm2 -g

Lancer une application

$ pm2 start app.js

Si vous utilisez Express, vous pouvez démarrer votre application comme

pm2 start ./bin/www --name="app"

Liste de tous les processus en cours d'exécution:

$ pm2 list

Il listera tout le processus. Vous pouvez ensuite arrêter/redémarrer votre service en utilisant l'ID ou le nom de l'application avec la commande suivante.

$ pm2 stop all                  
$ pm2 stop 0                    
$ pm2 restart all               

Pour afficher les journaux 

$ pm2 logs ['all'|app_name|app_id]
64
Vikash Rajpurohit

Je vous recommanderais de rechercher quelque chose comme Forever pour redémarrer Node en cas de panne et gérer le démonisation à votre place.

40
Brad

Si vous voulez juste exécuter votre application de noeud dans le terminal toujours, utilisez simplement screen.

Installez sur Ubuntu/Debian:

Sudo apt-get install screen

Usage:

$ screen
$ node /path/to/app.js

ctrl + a puis ctrl + d pour rejeter

Pour obtenir est de retour:

Un écran: screen -r

S'il y en a plus d'un, vous pouvez lister tous les écrans avec: screen -ls

Et ensuite: screen -r pid_number

31
film42

Vous pouvez simplement utiliser ceci 

Nohup node /srv/www/MyUserAccount/server/server.js &

Cela maintiendra l'application en cours d'exécution et pour la fermer, vous devrez la tuer.

Pour cela, vous pouvez installer htop puis rechercher un nœud puis le tuer.

21
Rick Roy

Forever est un très bon module NodeJs pour faire exactement cela.

Installez forever en tapant dans la ligne de commande

$ npm install forever -g

Ensuite, utilisez la commande suivante pour exécuter un script node.js

$ forever start /path/to/script.js

Tu es prêt. De plus, vous pouvez exécuter

$ forever list

pour voir tous les scripts en cours d'exécution. Vous pouvez terminer un script spécifique en tapant

$ forever stop [pid]

[pid] est l'ID de processus du script que vous obtiendrez de la commande list. Pour arrêter tous les scripts, vous pouvez taper

$ forever stopall
9
user4846835

Voici une solution upstart que j'utilise pour mes projets personnels:

Placez-le dans /etc/init/node_app_daemon.conf:

description "Node.js Daemon"
author      "Adam Eberlin"

stop on shutdown

respawn
respawn limit 3 15

script
  export APP_HOME="/srv/www/MyUserAccount/server"
  cd $APP_HOME
  exec Sudo -u user /usr/bin/node server.js
end script

Cela gérera également le réapparition de votre application en cas de blocage. Il renonce à toute tentative de réapparition de votre application s'il se bloque 3 fois ou plus en moins de 15 secondes.

8
Adam Eberlin

Pendant le développement, je vous recommande d'utiliser nodemon . Il redémarrera votre serveur chaque fois qu'un fichier est modifié. Comme d'autres l'ont déjà souligné, Forever est une option, mais en production, tout dépend de la plate-forme que vous utilisez ..____. Vous voudrez généralement utiliser la méthode recommandée par le système d'exploitation pour maintenir les services (par exemple _ { http://www.freedesktop.org/wiki/Software/systemd/ ).

7
Olivier Lalonde

J'ai toujours trouvé que le travail était parfait.

En supposant que vous avez déjà installé npm, sinon, faites simplement

Sudo apt-get install npm

Puis installez pour toujours

npm install forever --global

Maintenant, vous pouvez l'exécuter comme ça

forever start app.js

https://codingweb.io/run-nodejs-application-background/

6
erax

Installation 

$ [Sudo] npm install forever -g

Vous pouvez utiliser pour toujours pour exécuter des scripts en continu

forever start server.js

forever list

pour le service d'arrêt 

forever stop server.js
6
Sudhir singh

Vous pouvez également créer une unité système pour votre application. Créez un fichier "XXX.service" dans le dossier "/ etc/systemd/system", semblable à ceci:

[Unit]
Description=swagger
After=network.target

[Service]
ExecStart=/usr/bin/http-server /home/swagger/swagger-editor &
WorkingDirectory=/home/swagger
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

Un avantage est l'application fonctionnera en tant que service, elle redémarre automatiquement si elle s'est écrasée. 

Vous pouvez également utiliser sytemctl pour le gérer:

systemctl start XXX pour démarrer le service, systemctl stop XXX pour l'arrêter et systemctl enable XXX pour démarrer automatiquement l'application au démarrage du système.

3
Alex

Première installation de pm2 globalement

npm install -g pm2

puis commencez

pm2 start bin/www 
2
Vinayak Shedgeri

J'espère que cela t'aidera.

Sur la ligne de commande, installez toujours: 

npm install forever -g

Créez un exemple de fichier:

Sudo nano server.js 

Vous pouvez éditer le fichier et obtenir des résultats directement dans votre navigateur.
Vous pouvez utiliser filezilla ou n’importe quel éditeur pour éditer le fichier. Exécutez cette commande pour exécuter le fichier: 

forever start --minUptime 1 --spinSleepTime 1000 -w server.js

 enter image description here

1
ghanshyam nakiya

Je recommande d'utiliser PM2, un gestionnaire de processus pour les applications Node.js. PM2 offre un moyen simple de gérer et de démonaliser les applications (les exécuter en tant que service).

se référer à ce lien - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7

1
vishwa

Pas besoin d'installer un autre paquet.

Exécuter cette commande 

node server.js > stdout.txt 2> stderr.txt &

server.js est votre fichier serveur ou peut être api.js

Après cela, tapez " exit " pour fermer le terminal

exit
0
Gajender Singh