Démarrer automatiquement à jamais (nœud) sur le redémarrage du système
Je suis à l'aide du nœud jamais module de garder mon nœud de serveur en cours d'exécution. Jamais cependant se termine lorsqu'il y a un redémarrage du système. Est il possible que je peux démarrer automatiquement le serveur de nœud (à tout jamais) lorsque le système redémarre?
- Est ce serveur dans le cloud? Vous disposez de tous les scripts de démarrage pour elle?
- Checkout H2! Il prend également en charge le script de démarrage de génération (systemd, systemv...) pm2.keymetrics.io/docs/utilisation/de démarrage
Vous devez vous connecter pour publier un commentaire.
Je vous suggérons d'utiliser crontab. Il est facile à utiliser.
Comment
Pour commencer l'édition d'exécuter les opérations suivantes en remplaçant le "testuser" avec votre choix à l'exécution par l'utilisateur pour le nœud de processus. Si vous choisissez un autre utilisateur autre que vous-même, vous devrez exécuter la avec sudo.
Si vous ne l'avez jamais fait avant, il va vous demander quel éditeur vous souhaitez modifier avec. J'aime vim, mais nous vous recommandons de nano pour la facilité d'utilisation.
Une fois dans l'éditeur, ajoutez la ligne suivante:
Enregistrer le fichier. Vous devriez obtenir de la rétroaction que le cron a été installé.
Pour plus de confirmation de l'installation de la cron, exécutez la commande suivante (en remplaçant de nouveau "testuser" avec votre nom d'utilisateur cible) à la liste actuellement installés crons:
Note que, à mon avis, vous devriez toujours utiliser les chemins d'accès complets lors de l'exécution de fichiers binaires dans cron.
Aussi, si le chemin d'accès à votre forever script n'est pas correcte, exécutez
which forever
pour obtenir le chemin d'accès complet.Étant donné que
forever
appelsnode
, vous pouvez également fournir le chemin d'accès complet ànode
:Lecture
@reboot
cron de se faire rouler sur le cron daemon au démarrage. À ajouter que je n'ai jamais rencontré une situation qui donnerait à penser que mon cron qui sont mis à@reboot
ne pas courir sur le démarrage du système. La façon dont vous l'éteignez est pas pertinent pour cette.@reboot
entrées à ma crontab ne fonctionne pas pour moi; ni n'a les mêmes entrées (moins@reboot
, bien sûr) dans/etc/rc.local
. Qui est, jusqu'à ce que je préfacé les entrées avec/usr/bin/sudo -u {user}
. Par conséquent, je pense que l'Étape 1 devrait être modifié. j'ai testé cette forme à la fois avec et sans invoquer/usr/bin/sudo
; il ne fonctionne qu'avec:(cd /path/to/; /usr/bin/sudo -u myuser /usr/local/bin/forever start /path/to/app.js)
.-u
. L'aide qui écrit/éditer le crontab pour l'utilisateur et lorsque le démon est lancé, il va tous les processus de l'utilisateur crontabs que leurs utilisateurs respectifs.forever
! Lire la documentation pour vous pouvez faire tout en un "de commande".forever start /your/path/to/your/app.js
forever stop /your/path/to/your/app.js
forever restart /your/path/to/your/app.js
github.com/nodejitsu/.../home
n'est pas monté encore, donc cela ne fonctionnera pas si votre code de vie dans/home
.@reboot varname=value ...
~
bin/www
de démarrer le service, etbin/www
utilisation#!/usr/bin/env node
syntaxe d'exiger node.js pour le traiter, malheureusement/usr/local/bin
pas dans le CHEMIN de démarrage, donc ma solution est de mettre la ligne suivante en haut de mon fichier crontab:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
, afin d'élargir les utilisateurs racine variable de CHEMIN d'accès, qui fonctionne pour moiVous pouvez utiliser pour toujours-service pour faire cela.
Ce sera disposition app.js dans le répertoire courant comme un service via pour toujours. Le service redémarre automatiquement chaque fois que le système est redémarré. Aussi lorsqu'il est arrêté, il tentera d'un gracieux arrêter. Ce script dispositions de la logrotate le script.
Github url: https://github.com/zapty/forever-service
NOTE: je suis l'auteur de forever-service.
forever-service install test
,test
sera le nom de la service, mais pas le nom du programme / nœud .js fichier pour l'exécuter. Par défaut, on suppose que le nom du programme estapp.js
, mais vous pouvez la remplacer par de la--script
drapeau, comme suit:forever-service install test --script main.js
. (Non testé, donc s'il vous plaît corrigez-moi si il y a toute la syntaxe de détail de mal.)Ce cas valable pour Debian.
Ajoutez ce qui suit à
/etc/rc.local
/usr/bin/sudo -u {{user}} /usr/local/bin/forever start {{app path}}
{{utilisateur}} remplacer à votre nom d'utilisateur
{{app path}} remplacer votre chemin de app. Par exemple,
/var/www/test/app.js
/etc/rc.local
, pas/etc/init.d/rc.local
app.js
pour assurer relative fichiers sont chargés correctement -process.chdir('/your/path/to/your/app');
Node.js ref docs ici/etc/rc.local
a fait le tour pour moi:( cd /path/to/project && /usr/bin/sudo -u {{user}} env PORT={{port number}} PATH=$PATH:/usr/local/bin sh -c "forever start app.js" )
Installer PM2 à l'échelle mondiale à l'aide de MNP
npm install pm2 -g
Commencer votre script avec les pm2
pm2 start app.js
générer un actif script de démarrage
pm2 startup
REMARQUE: pm2 démarrage est pour startting le PM2, lorsque le système redémarre. PM2 une fois lancé, le redémarrage de tous les processus qu'il avait été de gérer avant que le système s'est arrêté.
Dans le cas où vous souhaitez désactiver le démarrage automatique, il suffit d'utiliser les pm2 unstartup
Si vous souhaitez que le script de démarrage pour être exécuté en vertu d'un autre utilisateur, il suffit d'utiliser la
-u <username>
option et la--hp <user_home>:
Une alternative crontab méthode inspirée par cette réponse et cette blog.
1. Créer un script bash fichier (changement de bob à d'utilisateur de votre choix).
2. Copiez le et collez-le à l'intérieur du fichier que vous venez de créer.
Assurez-vous de modifier les chemins d'accès ci-dessus en fonction de votre config!
3. Assurez-vous que le bash script peut être exécuté.
4. Remplacer "bob" avec le moteur d'exécution de l'utilisateur pour le nœud.
5. Copiez et collez (changement de bob à d'utilisateur de votre choix).
Enregistrer le crontab.
Vous l'avez fait à la fin, votre prix est un reboot (à tester) 🙂
Copié réponse de la question.
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
$pm2 startup
Après cela, vous verrez pm2 demandant d'exécuter manuellement une commande, copier et exécuter que. Ensuite,$pm2 save
Maintenant votre app.js survivra système redémarreVous devez créer un script shell dans /etc/init.d dossier pour que. C'est un peu compliqué si vous n'avez jamais fait, mais il ya beaucoup d'informations sur le web sur init.d scripts.
Voici un exemple d'un script que j'ai créé pour exécuter un CoffeeScript site avec forever:
J'ai eu à faire en sorte que le dossier et les Chemins d'accès ont été définies explicitement ou disponibles pour le super-utilisateur depuis init.d les scripts sont lancées en tant que root.
Utiliser le PM2
Qui est la meilleure option pour exécuter le serveur serveur de production
Quels sont les avantages de l'exécution de votre application de cette manière?
PM2 redémarre automatiquement à votre demande si elle se bloque.
PM2 permettra de tenir un journal de vos exceptions non gérées - dans ce cas, dans un fichier /home/safeuser/.pm2/logs/app-tre.journal.
Avec une seule commande, PM2 peut s'assurer que toutes les applications qu'il gère redémarrer lorsque le serveur redémarre. Fondamentalement, votre nœud application va démarrer en tant que service.
ref: https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps
Forever n'a pas été faite pour obtenir nœud applications en cours d'exécution en tant que services. La bonne approche consiste à créer un fichier /etc/inittab entrée (vieux systèmes linux) ou un arriviste (nouveaux systèmes linux).
Voici de la documentation sur la façon de le configurer comme un arriviste:
https://github.com/cvee/node-upstart
crontab ne fonctionne pas pour moi sur CentOS x86 6.5. @reboot ne semble pas travailler.
J'ai finalement trouvé cette solution.
Modifier /etc/rc.local
Ajoutez cette ligne à la fin du fichier. Changement USER_NAME et PATH_TO_PROJECT à votre propre. NODE_ENV=moyens de production l'application s'exécute en mode de production. Vous pouvez ajouter des lignes supplémentaires si vous avez besoin d'exécuter plus d'un node.js app.
Ne définissez pas NODE_ENV dans une ligne distincte, votre application continue à fonctionner en mode de développement, car jamais ne pas obtenir NODE_ENV.
Sauvegarder et quitter vi (appuyez sur la touche ECHAP : w q retour). Vous pouvez essayez de redémarrer votre serveur. Après votre serveur redémarre, votre node.js application devrait fonctionner automatiquement, même si vous ne vous connectez pas dans n'importe quel compte à distance via ssh.
Vous feriez mieux de mettre NODE_ENV de l'environnement dans votre shell. NODE_ENV sera réglée automatiquement lorsque votre compte USER_NAME connecte.
De sorte que vous pouvez exécuter des commandes comme jamais arrêter/démarrer /PATH_TO_PROJECT/app.js via ssh sans réglage NODE_ENV de nouveau.
J'ai écrit un script qui fait exactement cela:
https://github.com/chovy/node-startup
Je n'ai pas essayé avec forever, mais vous pouvez personnaliser la commande qu'il s'exécute, il doit être simple:
J'ai essayé beaucoup de réponses ci-dessus. Aucun d'entre eux travaillaient pour moi. Mon application est installée dans
/home
et tant qu'utilisateur, pas en tant que root. Cela signifie probablement que lorsque le ci-dessus mentionné commencer l'exécution des scripts,/home
n'est pas monté encore, donc, l'application n'est pas démarré.Puis j'ai trouvé ces instructions par Digital Ocean:
https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps
À l'aide de PM2, comme l'explique très simple et fonctionne parfaitement: Mes serveurs virtuels eu deux plantages depuis le temps d'arrêt n'était que d'environ une minute.
Le problème avec le rc.local c'est que les commandes sont accessibles en tant que root qui est différent de celui de la journalisation d'un utilisateur et de l'utilisation de sudo.
J'ai résolu ce problème en ajoutant un .sh script avec les commandes de démarrage, je veux etc/profile.d. Tout .sh fichier de profil.d se charge automatiquement et toute commande ne sera traitée que si vous avez utilisé l'ordinaire sudo.
Le seul inconvénient est l'utilisateur spécifié doit loggin pour des choses de départ qui dans ma situation a toujours été le cas.
Vous pouvez utiliser la commande suivante dans votre shell pour démarrer votre nœud jamais
pour toujours app.js //mon nœud de script
vous avez besoin de garder à l'esprit que le serveur sur lequel votre application est en cours d'exécution doit toujours conservés sur.
exemple complet crontab (situé dans /etc/crontab) ..