Sur un serveur Debian, j'ai installé Node.js. Je comprends comment lancer une application à partir de putty avec cette ligne de commande:
node /srv/www/MyUserAccount/server/server.js
et y accéder sur l'adresse 50.51.52.53:8080
(IP et port).
Mais dès que je ferme le mastic, je ne peux plus atteindre l'adresse 50.51.52.53:8080
.
Comment faire fonctionner une application Node.js en permanence?
Comme vous pouvez le deviner, je suis un débutant avec Linux et Node.js.
Réponses:
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 rencontre ce problème.
La clé est cette ligne, "je ferme le mastic, alors je ne peux pas atteindre l'adresse"
Lorsque vous êtes connecté à votre hôte distant sur Putty, vous avez démarré un processus Linux SSH et toutes les commandes saisies à partir de cette session SSH seront exécutées en tant qu'enfants dudit 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 du mastic, vous tuez par inadvertance votre serveur car vous l'avez exécuté au premier plan . Pour éviter ce comportement, exécutez le serveur en arrière - plan en ajoutant & à votre commande:
Le problème ici est un manque de connaissances Linux et non une question sur le nœud. 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 nœud peut toujours mourir à la sortie du terminal. Un piège commun que j'ai rencontré est que même si le processus de nœud s'exécute en bg, c'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 plantage. Cela peut être évité en canalisant la sortie de votre processus:
Si le problème persiste, vous devriez examiner des choses comme tmux ou nohup , qui sont toujours 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 langues).
Une erreur courante qui pourrait entraîner la
nohup node your_path/server.js &
fermeture du serveur est qu'après avoir exécuté le, vous fermez simplement le terminal Putty par un simple clic. Vous devez utiliser laexit
commande à la place, votre serveur de noeud sera alors opérationnel.la source
&
le service, il se ferme cependant. (Vient d'être testé sur Debian Jesse)nohup node /srv/www/MyUserAccount/server/server.js &
nohup node myApp.js &
exécuté l'application dans le bg mais elle meurt lorsque le terme a été fermé. Je ne sais pas pourquoi.exit
commande pour quitter le terminal.Vous pouvez installer pour toujours en utilisant npm comme ceci:
Et puis démarrez votre candidature avec:
Ou en tant que service:
Forever redémarre votre application lorsqu'elle se bloque ou s'arrête pour une raison quelconque. Pour limiter les redémarrages à 5, vous pouvez utiliser:
Pour répertorier tous les processus en cours d'exécution:
Notez l'entier entre crochets et utilisez-le comme suit pour arrêter un processus:
Le redémarrage d'un processus en cours se déroule comme suit:
Si vous travaillez sur votre fichier d'application, vous pouvez utiliser le
-w
paramètre pour redémarrer automatiquement chaque fois que votreserver.js
fichier change:la source
forever start <file>
forever server.js
etforever start server.js
? Je sais que c'est dit "en tant que service" mais qu'est-ce que cela signifie?forever server.js
, il démarre le serveur. Si j'appuie surCtrl
+C
, il arrête alors le service. Si je tapeforever start server.js
alors il démarre le service et même si j'appuie surCtrl
+C
il reste ouvert. Vous pouvez ensuite exécuter les autres commandes référencées ci-dessus pour arrêter / consulter la liste. C'est du moins ce que j'ai vécu.forever
module (v0.15.3) est vulnérable aux attaques par déni de service par expression régulière et ne doit pas être utilisé: github.com/foreverjs/forever/issues/960Vous pouvez utiliser PM2 , c'est un gestionnaire de processus de production pour les applications Node.js avec un équilibreur de charge intégré.
Installer PM2
Lancer une application
Si vous utilisez express, vous pouvez démarrer votre application comme
Liste de tous les processus en cours d'exécution:
Il répertorie tous les processus. Vous pouvez ensuite arrêter / redémarrer votre service en utilisant l'ID ou le nom de l'application avec la commande suivante.
Pour afficher les journaux
la source
Je recommande de rechercher quelque chose comme Forever pour redémarrer Node en cas de plantage, et de gérer la démonétisation pour vous.
la source
nohup
, node quittera lorsque vous quitterez la session ssh si vous l'exécutez de cette façon (sauf si vous utilisez quelque chose comme screen pour tmux).nohup
. Ce serait formidable si nous pouvions résoudre cette confusion. Mais je ne sais pas par où commencer.nohup
. Exemple:nohup node app.js &
Si vous souhaitez toujours exécuter votre application de nœud dans le terminal, utilisez simplement screen.
Installez sur ubuntu / debian:
Usage:
ctrl + a
puisctrl + d
de rejeterPour revenir est de retour:
Un écran:
screen -r
S'il y en a plusieurs, vous pouvez lister tous les écrans avec:
screen -ls
Puis:
screen -r pid_number
la source
Vous pouvez simplement utiliser ceci
Cela gardera l'application en cours d'exécution et pour la fermer, vous devrez la tuer.
Pour cela, vous pouvez installer
htop
et rechercher un nœud, puis le tuerla source
exit
commande). Si l'utilisateur ferme simplement la fenêtre, cela peut utiliser un signal autre queSIGHUP
pour mettre fin au processus, et donc le nœud s'arrêterait de toute façon.killall node
, qui tuera tous les processus de nœuds, dans mon cas un seul.Forever est un très bon module NodeJs pour faire exactement cela.
Installez
forever
en tapant dans la ligne de commandeUtilisez ensuite la commande suivante pour exécuter un script node.js
Tu es prêt. De plus, vous pouvez exécuter
pour voir tous les scripts en cours d'exécution. Vous pouvez terminer tout script spécifique en tapant
où
[pid]
est l'ID de processus du script que vous obtiendrez à partir de lalist
commande. Pour arrêter tous les scripts, vous pouvez taperla source
la source
Installation
Vous pouvez utiliser éternellement pour exécuter des scripts en continu
pour arrêter le service
la source
Voici une solution novatrice que j'utilise pour mes projets personnels:
Placez-le dans
/etc/init/node_app_daemon.conf
:Cela gérera également la réapparition de votre application en cas de panne. Il abandonnera les tentatives de réapparition de votre application si elle se bloque 3 fois ou plus en moins de 15 secondes.
la source
Pendant le développement, je recommande d'utiliser nodemon . Il redémarrera votre serveur chaque fois qu'un fichier change. Comme d'autres l'ont souligné, Forever est une option mais en production, tout dépend de la plateforme que vous utilisez. Vous souhaiterez généralement utiliser la méthode recommandée par le système d'exploitation pour maintenir les services à jour (par exemple http://www.freedesktop.org/wiki/Software/systemd/ ).
la source
nodemon
exécute la commande grunt sauf si vous spécifiez un fichier JS de serveur, donc je l'utilise pour exécuter mongo et node pour toujours / simultanémentJ'ai trouvé pour toujours faire le travail parfaitement bien.
En supposant que vous avez déjà installé npm, sinon, faites-le
Puis installez pour toujours
Maintenant, vous pouvez l'exécuter comme ceci
https://codingweb.io/run-nodejs-application-background/
la source
Première installation de pm2 dans le monde
Puis commencez
la source
Une autre façon consiste à créer une unité système pour votre application. créez un fichier "XXX.service" dans le dossier "/ etc / systemd / system", similaire à ceci:
Un avantage est que l'application fonctionnera en tant que service, elle redémarre automatiquement en cas de panne.
Vous pouvez également utiliser sytemctl pour le gérer:
systemctl start XXX
pour démarrer le service,systemctl stop XXX
pour l'arrêter etsystemctl enable XXX
pour démarrer automatiquement l'application au démarrage du système.la source
J'espère que cela t'aidera.
Sur la ligne de commande, installez pour toujours:
Créez un exemple de fichier:
Vous pouvez modifier le fichier et obtenir des résultats directement dans votre navigateur.
Vous pouvez utiliser filezilla ou n'importe quel éditeur pour modifier le fichier. Exécutez cette commande pour exécuter le fichier:
la source
Pas besoin d'installer un autre package.
Exécutez cette commande
server.js est votre fichier serveur ou il peut être api.js
Après cela, cliquez sur " Quitter " pour fermer le terminal
la source
Je recommande d'utiliser PM2, qui est un gestionnaire de processus pour les applications Node.js. PM2 fournit un moyen simple de gérer et de démonifier des applications (exécutez-les en tant que service).
référez-vous à ce lien - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7
la source
Forever Package a fonctionné pour moi, juste une chose, cela dépend de deep-equal , donc si vous avez eu un problème avec son installation comme:
Essayer:
au lieu.
la source