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.
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.
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
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]
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.
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
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.
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]
où [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
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.
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/ ).
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
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
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.
Première installation de pm2 globalement
npm install -g pm2
puis commencez
pm2 start bin/www
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
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
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