Comment puis-je exécuter un node.js application comme un service d'arrière-plan?
Depuis ce post a obtenu beaucoup d'attention au cours des années, j'ai listé les meilleures solutions par la plate-forme en bas de ce post.
Post Original:
Je veux que mon node.js serveur pour exécuter en arrière-plan, c'est à dire: quand je ferme mon terminal je veux que mon serveur pour continuer à fonctionner. J'ai googlé ce et est venu avec cette tutoriel, toutefois, il ne fonctionne pas comme prévu. Ainsi, au lieu d'utilisation de ce script de démon, j'ai pensé que je viens d'utiliser la redirection de la sortie (le 2>&1 >> file
partie), mais ce n'est pas la sortie - je obtenir une ligne vide dans mon terminal, comme il est en attente pour la sortie d'erreurs.
J'ai aussi essayé de mettre le processus en arrière-plan, mais dès que je ferme mon terminal le processus est tué ainsi.
Alors, comment puis-je le laisser en cours d'exécution lorsque j'ai arrêté mon ordinateur local?
Les meilleures solutions:
- Systemd (Linux)
- Launchd (Mac)
- nœud-windows (Windows)
- PM2 (Node.js)
- Je pense qu'il voulait dire d'arrêter son système local
- il signifiait la fermeture d'une session ssh met fin à la tâche
- exactement
- github.com/Unitech/pm2 est très bien entretenus et très stable, le gestionnaire de processus, lui donner un essai !
- vous pouvez utiliser l'écran (aperiodic.net/screen/quick_reference)
Vous devez vous connecter pour publier un commentaire.
La copie de ma propre réponse de Comment puis-je exécuter un Node.js application comme son propre processus?
2015 répondre: presque toutes les distro Linux est livré avec systemd, ce qui signifie jamais, monit, PM2, etc ne sont plus nécessaires - votre système d'exploitation prend en charge ces tâches.
Faire un
myapp.service
fichier (en remplacement de 'myapp' avec le nom de votre application, évidemment):Noter que si vous êtes nouveau sous Unix:
/var/www/myapp/app.js
devrait avoir#!/usr/bin/env node
sur la première ligne.Copie de votre fichier de service dans le
/etc/systemd/system
.Démarrer avec
systemctl start myapp
.Lui permettre d'exécuter au démarrage avec
systemctl enable myapp
.Voir les journaux avec
journalctl -u myapp
Ceci est pris à partir de Comment nous déployer nœud applications sur Linux, 2018 édition, qui comprend également des commandes pour générer une AWS/DigitalOcean/Azure CloudConfig de construire Linux/nœud serveurs (y compris les
.service
fichier).~/.config/systemd/user
, commencer avecsystemctl --user start myapp
, l'activer avecsystemctl --user enable myapp
.monit
? cyberciti.biz/astuces/...monit
nobody
, vous pourriez vouloir essayernogroup
- les différentes distributions Linux utilisent différentes conventions.Vous pouvez utiliser pour Toujours, Un simple CLI outil pour s'assurer qu'un nœud de script s'exécute en continu (c'est à dire jamais):
https://www.npmjs.org/package/forever
forever start /path/to/yourApp.js
dans votre script de démarrage du serveur.forever
démarrer automatiquement votre script à chaque fois que vous redémarrez?Mise à JOUR - Comme mentionné dans l'une des réponses ci-dessous, PM2 a quelques très belles fonctionnalités manquantes à partir pour toujours. Pensez à l'utiliser.
Réponse Originale À Cette Question
Utilisation nohup:
MODIFIER je voulais ajouter que l'on a accepté la réponse est vraiment la voie à suivre. Je suis aide à jamais sur les instances qui ont besoin de rester en place. J'aime faire
npm install -g forever
il est dans le chemin d'accès du nœud et puis il suffit de faireforever start server.js
nohup
signifieno hangup
qui vient de l'ancien des jours, au cas où vous vouliez vous gardez un processus de vie, lorsque vous "raccrochage" de votre modem.Cela pourrait ne pas être le moyen accepté, mais je le fais avec écran, surtout pendant le développement, parce que je peux le ramener et de le tromper avec celui-ci si nécessaire.
L'écran va se détacher et de vous survivre à la déconnexion. Ensuite, vous pouvez obtenir de revenir en arrière en faisant screen-r. Frapper vers le haut de l'écran manuel pour plus de détails. Vous pouvez nommer les écrans et autres joyeusetés si vous le souhaitez.
2016 mise à Jour:
Le nœud-windows/mac/linux série utilise une API commune à travers tous les systèmes d'exploitation, de sorte qu'il est absolument une solution pertinente. Cependant, nœud-linux génère systemv fichiers d'initialisation. Comme systemd continue de croître en popularité, il ne l'est réellement une meilleure option sur Linux. PR est la bienvenue si quelqu'un veut ajouter systemd soutien à nœud-linux 🙂
Thread D'Origine:
C'est un assez vieux thread maintenant, mais nœud-windows offre un autre moyen de créer des services d'arrière-plan sur Windows. Il est vaguement basé sur le
nssm
concept de l'utilisation d'unexe
wrapper autour de votre nœud de script. Cependant, il utilisewinsw.exe
au lieu et configurable fournit un nœud de l'enveloppe pour un contrôle plus précis sur la façon dont le processus démarre/s'arrête sur les échecs. Ces processus sont disponibles comme n'importe quel autre service:Le module transforme aussi dans certains cas d'enregistrement:
Daemonizing votre script est accompli à l'aide de code. Par exemple:
Le module prend en charge les choses comme plafonnement redémarre (si mauvais scripts ne sont pas le tuyau de votre serveur) et la croissance des intervalles de temps entre les redémarrages.
Depuis nœud-windows de services comme les autres, il est possible de gérer/surveiller le service avec le logiciel que vous utilisez déjà.
Enfin, il n'y a pas
make
dépendances. En d'autres termes, un simplenpm install -g node-windows
fonctionne. Vous n'avez pas besoin de Visual Studio, .NET, ou nœud-gyp la magie de l'installer. Aussi, il est MIT et sous licence BSD.La divulgation complète, je suis l'auteur de ce module. Il a été conçu pour soulager la douleur exacte de l'OP connu, mais avec une meilleure intégration dans la fonctionnalité du Système d'Exploitation fournit déjà. J'espère que les futurs téléspectateurs avec cette même question de le trouver utile.
Mise à JOUR: j'ai mis à jour pour inclure les dernières de pm2:
pour de nombreux cas d'utilisation, à l'aide d'un service systemd est le plus simple et le plus approprié pour gérer un nœud de processus. pour ceux qui sont en cours d'exécution de nombreux nœud de processus ou exécutant indépendamment du nœud de microservices dans un environnement unique, pm2 est plus complète de toutes les fonctionnalités de l'outil.
https://github.com/unitech/pm2
http://pm2.io
pm2 monit
ou de la liste de processus avecpm2 list
pm2 logs
Si vous OSX, puis la façon la plus simple de produire un véritable processus de système est d'utiliser
launchd
pour le lancer.Construire un plist comme ça, et de le mettre dans le dossier /Library/LaunchDaemons avec le nom
top-level-domain.your-domain.application.plist
(vous devez être root lors de la passation de celle-ci):Quand c'est fait, cette question (en tant que root):
et vous êtes en cours d'exécution.
Et vous serez toujours en cours d'exécution après un redémarrage.
Pour d'autres options dans le plist regardez la page de man ici: https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man5/launchd.plist.5.html
Je suis simplement à l'aide de la démon mnp module:
Dernièrement, je suis également en utilisant mon(1) de TJ Holowaychuk à lancer et à gérer nœud simple apps.
Tout simplement si vous souhaitez exécuter le script sans interruption jusqu'à la fin, vous pouvez utiliser
nohop
comme déjà mentionné dans les réponses ici. Cependant, aucune des réponses fournir une commande qui enregistre égalementstdin
etstdout
.>>
signifie ajouter àapp.log
.2>&1
permet de s'assurer que les erreurs sont également envoyer àstdout
et ajouté à laapp.log
.&
fait en sorte que votre terminal actuel est déconnecté de commande de sorte que vous pouvez continuer à travailler.Si vous souhaitez exécuter un nœud de serveur (ou quelque chose qui devrait commencer à remonter lorsque le serveur redémarre), vous devez utiliser systemd /systemctl.
- Je utiliser Superviseur pour le développement. Il fonctionne, tout simplement. Lorsque vous apportez des modifications à un .fichier js Superviseur redémarre automatiquement votre application avec ces changements chargé.
Voici un lien vers sa page Github
Installer :
Vous pouvez facilement faire regarder les autres extensions de avec-e. Une autre commande que j'utilise souvent est -i pour ignorer certains dossiers.
Vous pouvez utiliser nohup et le superviseur à faire votre nœud de l'application de fonctionner en arrière-plan, même après que vous vous déconnectez.
Essayez d'exécuter cette commande si vous utilisez nohup -
Vous pouvez également utiliser une éternité à démarrer le serveur
PM2 prend également en charge
npm start
pm2 start npm -- start
Node.js comme un service d'arrière-plan dans WINDOWS XP
Installation:
Créer c:\node\helloworld.js
Ouvrir la console de commande et tapez la commande suivante (setx uniquement si le Kit de Ressources est installé)
Un chouette lot de goodie est de créer c:\node\ServiceMe.cmd
Gestion Du Service:
services.msc ou via Démarrer->Exécuter-> MSCONFIG-> les Services (et cocher " Masquer
Tous Les Services Microsoft').
'nœud'.
Accepté la réponse est probablement le meilleur de la production à répondre, mais pour un rapide hack de faire les travaux de développement, j'ai trouvé ceci:
nodejs scriptname.js &
n'ai pas de travail, parce que nodejs semblait engloutir le &, et donc, la chose ne m'a pas laissé continuer à utiliser le terminal, sans scriptname.js en train de mourir.Mais j'ai mis
nodejs scriptname.js
dans un .sh fichier, etnohup sh startscriptname.sh &
travaillé.Certainement pas une production de chose, mais il résout le "j'ai besoin de garder mon terminal et ne voulons pas commencer à 5 différents terminaux" problème.
Si vous exécutez nodejs en serveur linux, je pense que c'est le meilleur moyen.
Créer un service de script et de le copier dans /etc/init/nodejs.conf
de démarrer le service: sudo service de nodejs commencer
arrêter le service: sudo service de nodejs arrêter
Sevice script
Juin 2017 Mise À Jour:
Solution pour Linux (Red hat). Les commentaires précédents ne fonctionne pas pour moi.
Cela fonctionne pour moi sur Amazon Web Service - Red Hat 7. Espérons que cela fonctionne pour quelqu'un là-bas.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080
ce qu'il fait. Pouvez-vous me donner plus de détails s'il vous plaît. Je ne suis pas sûr mais je pense qu'il redirige le trafic de80
à8080
le nœud d'écoute du serveur, pas vrai?utilisation nssm la meilleure solution pour windows, il suffit de télécharger nssm, ouvrir cmd pour nssm répertoire et le type
cela permettra d'installer un nouveau service windows qui seront inscrites au services.msc à partir de là, vous pouvez démarrer ou arrêter le service, ce service démarrera automatiquement et vous pouvez le configurer pour redémarrer en cas d'échec.
À tour les différentes options proposées, en voici un de plus: le
daemon
de commande sous GNU/Linux, que vous pouvez lire ici: http://libslack.org/daemon/manpages/daemon.1.html. (toutes mes excuses si cela a déjà été mentionné dans un des commentaires ci-dessus).Découvrez fugue! Outre le lancement de nombreux travailleurs, vous pouvez diaboliser votre nœud de processus trop!
http://github.com/pgte/fugue
quelqu'un a remarqué un trivial erronée de la position "2>,&1" ?
devrait être
- Je utiliser tmux pour un multiple de la fenêtre/volet environnement de développement sur des hôtes distants. Il est vraiment simple à se détacher et à conserver les processus en cours d'exécution en arrière-plan. Jetez un oeil à tmux
Pour les personnes qui utilisent des versions plus récentes de la démon module npm - vous besoin de passer des descripteurs de fichier à la place de chaînes de caractères:
PM2 est un processus de production, le gestionnaire de Node.js applications avec un équilibreur de charge. Il vous permet de garder les applications vivant pour toujours, pour les recharger sans temps d'arrêt et de faciliter système commun des tâches d'administration.
https://github.com/Unitech/pm2
Je suis surpris que personne n'a mentionné Guvnor
J'ai essayé de toujours, pm2, etc. Mais, quand il s'agit de contrôle solide et basé sur le web les paramètres de performance, j'ai trouvé Guvnor à être de loin le meilleur. De Plus, il est aussi entièrement opensource.
Edit : Cependant, je ne suis pas sûr si cela fonctionne sur windows. Je ne l'ai utilisé sur linux.
Cette réponse est tout à fait en retard à la fête, mais j'ai trouvé que la meilleure solution était d'écrire un script shell utilisé à la fois le
screen -dmS
etnohup
commandes.J'ai aussi ajouter le
>> logfile
peu sur la fin, donc je peux facilement enregistrer le nœudconsole.log()
consolidés.Pourquoi n'ai-je utiliser un script shell? Eh bien j'ai aussi ajouté dans une instruction if qui vérifie si le
node myserver.js
processus était déjà en cours d'exécution.Qui m'a permis de créer une seule option de ligne de commande que les deux me permet de garder le serveur en cours et aussi de le redémarrer lorsque j'ai fait des changements, ce qui est très utile pour le développement.