310 votes

Comment faire fonctionner une application node.js de manière permanente ?

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

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

et se rendre à 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 plus.

Comment faire fonctionner une application Node.js de façon permanente ?

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

398voto

N20 Points 351

Vous pouvez installer pour toujours en utilisant npm comme ceci :

sudo npm install -g forever

Commencez ensuite votre candidature par :

forever server.js

Ou en tant que service :

forever start server.js

Redémarre à jamais votre application lorsqu'elle se bloque ou s'arrête pour une raison quelconque. Pour limiter le nombre de redémarrages à 5, vous pouvez utiliser :

forever -m5 server.js

Pour dresser la liste de tous les processus en cours :

forever list

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

forever stop 0

Le redémarrage d'un processus en cours se fait :

forever restart 0

Si vous travaillez sur votre fichier d'application, vous pouvez utiliser la fonction -w pour redémarrer automatiquement chaque fois que votre server.js modifications du dossier :

forever -w server.js

268voto

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

La clé est cette ligne, "Je ferme putty, puis je ne peux pas atteindre l'adresse"

Lorsque vous êtes connecté à votre hôte distant sur Putty, vous avez démarré un processus SSH linux et toutes les commandes tapées à partir de cette session SSH seront exécutées en tant que fils de ce processus.

Votre problème est que lorsque vous fermez Putty, vous quittez la session SSH, ce qui tue ce processus et tous les processus enfants actifs. Lorsque vous fermez Putty, vous tuez par inadvertance votre serveur parce que vous l'avez exécuté dans la session SSH. premier plan . Pour éviter ce comportement, exécutez le serveur en mode arrière-plan 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 sur node. Pour plus d'informations, consultez le site : http://linuxconfig.org/understanding-foreground-and-background-linux-processes

UPDATE :

Comme d'autres l'ont mentionné, le serveur de nœuds peut toujours mourir lorsque l'on quitte le terminal. Un problème courant que j'ai rencontré est que même si le processus node tourne dans bg, ses stdout et stderr sont toujours dirigés vers le terminal. Cela signifie que si le serveur node écrit dans console.log ou console.error, il recevra une erreur de rupture de pipe et se plantera. Ceci peut être évité en pipant la sortie de votre processus :

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

Si le problème persiste, il convient d'examiner les points suivants tmux o nohup qui restent plus robustes que les solutions spécifiques aux nœuds, car elles peuvent être utilisées pour exécuter tous les types de processus (bases de données, services de journalisation, autres langages).

Une erreur fréquente qui peut entraîner la sortie du serveur est qu'après l'exécution de la commande nohup node your_path/server.js & vous fermez simplement le terminal Putty par un simple clic. Vous devez utiliser exit à la place, votre serveur de nœuds sera opérationnel.

112voto

Vikash Rajpurohit Points 982

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 PM2

$ npm install pm2 -g

Lancer une demande

$ pm2 start app.js

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

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

Liste de tous les processus en cours :

$ pm2 list

La liste de tous les processus s'affichera. Vous pouvez alors 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]

44voto

Brad Points 61171

Je recommanderais de rechercher quelque chose comme Pour toujours pour redémarrer Node en cas de crash, et gérer la démonisation pour vous.

42voto

film42 Points 439

Si vous souhaitez simplement exécuter votre application node dans le terminal en permanence, utilisez simplement screen.

Installer sur ubuntu/ debian :

sudo apt-get install screen

Utilisation :

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

ctrl + a et ensuite ctrl + d de rejeter

Pour le récupérer :

Un écran : screen -r

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

Et puis.. : screen -r pid_number

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