Comment faire un node.js l'exécution de l'application en permanence?
Sur un serveur Debian, j'ai installé Node.js. Je comprends comment lancer une application de mastic avec cette ligne de commande:
node /srv/www/MyUserAccount/server/server.js
et l'obtenir à l'adresse 50.51.52.53:8080
(IP et port).
Mais dès que je ferme le mastic, alors je ne peux pas atteindre l'adresse 50.51.52.53:8080
plus.
Comment faire un Node.js l'exécution de l'application en permanence?
Comme vous pouvez le deviner, je suis un débutant avec Linux et Node.js.
- Notez que h2 c'est une bonne alternative. Jamais, si vous ne voulez pas l'utiliser pour Toujours pour quelque raison que ce soit.
- pouvez-vous vérifier cela, stackoverflow.com/questions/12701259/... je sais que c'est une très vieille question et de la réponse de la marque comme de Véritables dos long mais il suffit de penser de cela, il fonctionne vraiment bien.
- désolé pour la réponse tardive. C'est quelque chose que j'ai l'intention d'essayer. Merci pour le lien.
- merci @KevinB github.com/Unitech/pm2 est vraiment bonne alternative.
- Double Possible de Comment puis-je exécuter un node.js application comme un service de base?
Vous devez vous connecter pour publier un commentaire.
Bien que les autres réponses résoudre les OP de problème, ils sont tous les excès et de ne pas expliquer pourquoi il ou elle est confronté à ce problème.
La clé est de cette ligne, "j'ai près de mastic, puis je ne peux pas atteindre l'adresse"
Lorsque vous êtes connecté à votre hôte distant sur le Mastic que vous avez commencé un SSH linux et toutes les commandes tapées à partir de cette session SSH sera exécutée comme les enfants du dit processus.
Votre problème, c'est que lorsque vous fermez le Mastic que vous quittez la session SSH qui tue que des processus et des actifs de processus enfant. Lorsque vous fermez le mastic de vous, par inadvertance tuer votre serveur parce que vous avez exécuté dans le premier plan. Pour éviter ce comportement, de l'exécution du serveur dans le fond en ajoutant & à votre commande:
Ici, le problème est un manque de connaissances linux et pas une question à propos de nœud. Pour plus d'infos consultez: http://linuxconfig.org/understanding-foreground-and-background-linux-processes
Mise à JOUR:
Comme d'autres l'ont mentionné, le nœud serveur peut encore mourir lors de la sortie du terminal. Une commune de la chasse aux sorcières que j'ai rencontré est que, même si le nœud processus est en cours d'exécution dans le bg, c'est la sortie standard stdout et stderr est encore souligné dans le terminal. Cela signifie que si le nœud serveur écrit à la console.journal ou de la console.erreur, il recevra un bris de tuyau d'erreur et de crash. Ceci peut être évité par la tuyauterie de sortie de votre processus:
Si le problème persiste, alors vous devriez regarder dans les choses comme tmux ou nohup, qui sont encore plus robuste que le nœud de solutions spécifiques, car ils peuvent être utilisés pour exécuter tous les types de processus (bases de données, l'exploitation forestière services, autres langues).
Une erreur commune que pourrait causer le serveur pour quitter c'est qu'après l'exécution de la
nohup node your_path/server.js &
il vous suffit de fermer le terminal Putty par un simple clic. Vous devez utiliserexit
de commande au lieu de cela, votre nœud serveur sera en place et en cours d'exécution.&
le service toujours se ferme bien. (Juste testé sur Debian Jesse)nohup node /srv/www/MyUserAccount/server/server.js &
nohup node myApp.js &
exécuté l'application dans le bg, mais il meurt quand le terme a été fermé. Pas sûr, mais pourquoi.exit
commande pour quitter le terminal.Vous pouvez en installer pour toujours à l'aide de npm comme ceci:
Et de démarrer votre application avec:
Ou en tant que service:
Jamais redémarrage de votre application quand il se bloque ou s'arrête pour une raison quelconque. Pour limiter redémarre à 5, vous pouvez utiliser:
À la liste de tous les processus en cours d'exécution:
Note le nombre entier dans les crochets et l'utiliser comme suit pour arrêter un processus:
Redémarrage d'un processus en cours d'exécution va:
Si vous travaillez sur votre dossier de candidature, vous pouvez utiliser le
-w
paramètre pour redémarrer automatiquement à chaque fois que votreserver.js
modifications du fichier:forever start <file>
forever server.js
etforever start server.js
? Je sais qu'il dit qu'il est "comme un service" mais qu'est-ce que cela signifie?forever server.js
, il démarre le serveur. Si je presseCtrl
+C
, il arrête le service. Si je tape dansforever start server.js
puis il commence le service et même si je presseCtrl
+C
elle reste ouverte. Vous pouvez ensuite faire les autres référencé commandes ci-dessus pour arrêter / regarder la liste. C'est ce que j'ai vécu au moins.forever start ./bin/www
à la place.forever
module (v0.15.3) est vulnérable à l'Expression Régulière attaques par Déni de Service et ne doit pas être utilisé: github.com/foreverjs/forever/issues/960forever index.js
et l'application a cessé quand j'ai faitCtrl+c
. J'ai ensuite essayéforever index.js &
et cela a fonctionné, même après la sortie de la ssh.Vous pouvez utiliser PM2, c'est un processus de production, le gestionnaire de Node.js applications avec un équilibreur de charge.
Installer PM2
Démarrer une application
Si vous utilisez express, vous pouvez démarrer votre application, tels que la
Liste de tous les processus en cours d'exécution:
Il fournira la liste de tous les processus. Vous pouvez ensuite arrêter /redémarrer votre service à l'aide de l'ID ou le Nom de l'application avec la commande suivante.
Pour afficher les journaux de
Je vous recommande la recherche de quelque chose comme Pour toujours pour redémarrer le Nœud dans le cas d'un accident, et la poignée daemonizing pour vous.
nohup
, nœud de sortie lorsque vous quittez la session ssh si vous exécutez cette façon (sauf si vous utilisez quelque chose comme écran de tmux).nohup
. Ce serait formidable si nous pouvons résoudre cette confusion. Mais je ne sais pas par où commencer.nohup
. Exemple:nohup node app.js &
Si vous voulez juste pour exécuter votre nœud de l'application dans le terminal toujours, il suffit d'utiliser l'écran.
Installer sur ubuntu/debian:
Utilisation:
ctrl + a
et puisctrl + d
de rejeterÀ obtenir est de retour:
Un écran:
screen -r
Si il n'y a plus d'un, vous pouvez lister tous les écrans, avec:
screen -ls
Et puis:
screen -r pid_number
Vous pouvez simplement utiliser ce
Cela permet de garder l'application en cours d'exécution et pour l'arrêter, vous devrez le tuer.
Pour que vous pourriez installer
htop
et ensuite, la recherche de nœud et puis la tuerexit
de commande). Si l'utilisateur ferme la fenêtre, il peut utiliser un signal autre queSIGHUP
à la fin du processus, et donc nœud d'arrêt, de toute façon.killall node
, qui va tuer tous les nœud de processus, dans mon cas, un seul.Pour toujours est un très bon module NodeJs pour faire exactement cela.
Installer
forever
en tapant dans la ligne de commandePuis utilisez la commande suivante pour exécuter un node.js script
Vous êtes bon pour aller. En outre, vous pouvez exécuter
pour voir tous les scripts. Vous pouvez mettre fin à tout script spécifique en tapant
où
[pid]
est l'ID de processus du script, vous allez obtenir de lalist
de commande. Pour arrêter tous les scripts, vous pouvez taperVoici un upstart solution que j'ai utilisé pour mes projets personnels:
Placer dans
/etc/init/node_app_daemon.conf
:Cela permettra également de gérer les réapparitions de votre application dans le cas où il se bloque. Il va abandonner les tentatives de respawn votre demande si il plante 3 fois ou plus en moins de 15 secondes.
Cours de développement, je vous recommande d'utiliser nodemon. Il va redémarrer votre serveur à chaque fois qu'un fichier est modifié. Comme d'autres l'ont souligné, Pour toujours est une option, mais dans la production, tout dépend de la plate-forme que vous utilisez.
Vous souhaitez utiliser le système d'exploitation est recommandé de maintenir les services (par exemple,http://www.freedesktop.org/wiki/Software/systemd/).
nodemon
exécute la commande grunt, sauf si vous spécifiez un serveur de fichier JS, donc je suis en utilisant cette option pour exécuter mongo et nœud à jamais/simultanémentInstallation
Vous pouvez utiliser une éternité pour exécuter des scripts en permanence
pour arrêter le service
J'ai trouvé une éternité pour faire le travail parfaitement bien.
En supposant que vous avez déjà mnp installé, si non, il suffit de faire
Puis installez jamais
Maintenant, vous pouvez l'exécuter comme ce
https://codingweb.io/run-nodejs-application-background/
De la première installation de pm2 globalement
puis commencer à
Une autre façon est de créer une unité de système pour votre application. créer un "XXX.service" fichier "/etc/systemd/system" dossier, similaire à ceci:
Un avantage est que l'application va s'exécuter en tant que service, il redémarre automatiquement si il s'est planté.
Vous pouvez également utiliser sytemctl à gérer: les
systemctl start XXX
pour démarrer le service,systemctl stop XXX
pour l'arrêter etsystemctl enable XXX
le démarrage automatique de l'application lors de l'initialisation du système.J'espère que cela va vous aider.
À la ligne de commande, installez jamais:
Créer un fichier de l'exemple:
Vous pouvez modifier le fichier et d'obtenir des résultats directement dans votre navigateur.
Vous pouvez utiliser filezilla ou tout éditeur pour modifier le fichier.
Exécutez cette commande pour exécuter le fichier:
Je vous recommandons d'utiliser les PM2, qui est un gestionnaire de processus pour Node.js des applications. PM2 fournit un moyen facile de gérer et de daemonize applications (exécuter en tant que service).
consulter 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 n'importe quel autre paquet.
Exécuter cette commande
server.js est votre serveur de fichier ou il peut être api.js
Après ce coup "sortie" pour fermer la borne