Ensuite, voyons si pour toujours peut atteindre l'objectif.
1. Introduction pour toujours
Forever est un démon de nodejs impératif simple qui peut démarrer, arrêter et redémarrer les applications d'applications. Forever est entièrement basé sur les opérations de ligne de commande. Dans le cadre du processus pour toujours, un processus d'enfant nœud est créé et le processus d'enfant nœud est surveillé via le moniteur. Une fois le fichier mis à jour ou que le processus est détaché, redémarrez pour toujours le serveur de nœuds pour s'assurer que l'application s'exécute normalement.
2. Installation pour toujours
Installation mondiale pour toujours
La copie de code est la suivante:
~ D: / workspace / javascript> npm install -g pour toujours
D: / toolkit / nodejs / Forever -> d: / toolkit / nodejs / node_modules / Forever / bin / Forever
D: / toolkit / nodejs / foreverd -> d: / toolkit / nodejs / node_modules / Forever / bin / Foreverd
Découvrez Aide Forever
La copie de code est la suivante:
~ D: / workspace / javascript> Forever -H
AIDE: USAGE: Forever [Action] [Options] Script [Script-Options]
aide:
Aide: surveille le script spécifié dans le processus actuel ou comme un démon
aide:
Aide: actions:
Aide: démarrer le script comme un démon
Aide: arrêtez d'arrêter le script de démon
Aide: Stopall Stop All Running Forever Scripts
Aide: redémarrer le script de démon
Aide: redémarrez tous les scripts en cours d'exécution pour toujours
Aide: liste de liste tous les scripts pour toujours
Aide: la configuration répertorie toute la configuration de l'utilisateur pour toujours
Aide: SET <CIED> <VAL> Définit la configuration pour toujours spécifiée <Tey>
AIDE: Effacer <Sey> Efface la configuration pour toujours spécifiée <Key>
Aide: les journaux répertorient les fichiers journaux pour tous les processus pour toujours
Aide: journaux <script | index> Tails Les journaux de <script | index>
AIDE: Colonnes Ajouter <Col> Ajoute la colonne spécifiée à la sortie dans `Forever List`
Aide: les colonnes RM <Col> ont supprimé la colonne spécifiée de la sortie dans `Liste pour toujours '
AIDE: COLONNES SET <COLS> Définissez toutes les colonnes pour la sortie dans `Forever List`
Aide: Cleanlogs [prudent] Supprime tous les fichiers journaux historiques pour toujours
aide:
Aide: Options:
Aide: -m max exécute uniquement le script spécifié maximum
AIDE: -L LOGFILE JORS la sortie pour toujours à Logfile
AIDE: -O OUTFILE LOGS STDOUT DU SCRIPT ENFANT À OUTFILE
Aide: -e errfile journalise stderr du script enfant à errfile
AIDE: -PAT DE BASE DE PATAINS POUR TOUS les fichiers pour toujours (fichiers PID, etc.)
Aide: -c commande de commande à exécuter (par défaut au nœud)
Aide: -A, - APPEPEND les journaux d'ajout
Aide: -F, - FIFO Stream Journaux à STDOUT
Aide: -n, - nombre de lignes de journal à imprimer
Aide: --pidfile le fichier PID
Aide: --Sourcedir le répertoire source pour lequel le script est relatif
AIDE: - Minimum Minimum Uptime (Millis) pour qu'un script ne soit pas considéré comme "Spinning"
Aide: - Spinsleeptime Time to Wait (Millis) entre les lancements d'un script en rotation.
AIDE: - Colors - Aucune couleur désactivera la coloration de sortie
Aide: - PLAINE ALIAS DE - NO-COLORS
Aide: -d, - Debug force pour toujours pour enregistrer la sortie de débogage
Aide: -v, --verbose se retourne sur les messages verbeux de toujours
Aide: -s, - Silent exécuter le script de l'enfant en silençage stdout et stderr
Aide: -W, --voyez une surveillance pour les modifications de fichiers
Aide: - WatchDirectory Top-Level Directory à regarder à partir de
Aide: --watchignore pour ignorer le modèle lorsque la montre est activée (l'option multiple est autorisée)
Aide: -H, - - aillez-vous le regarde
aide:
Aide: [processus de longue durée]
Aide: le processus pour toujours continuera d'exécuter des messages de journal de sortie vers la console.
Aide: Ex. Forever -o out.log -e err.log my-script.js
aide:
Aide: [démon]
Aide: le processus pour toujours fonctionnera comme un démon qui fera démarrer le processus cible
Aide: en arrière-plan. Ceci est extrêmement utile pour les scripts Node.js simples de démarrage à distance
Aide: sans utiliser nohup. Il est recommandé d'exécuter Start with -o -l, & -e.
Aide: Ex. pour toujours démarrer -l pour toujours.log -o out.log -e err.log my-daemon.js
Aide: arrêt pour toujours My-daemon.js
aide:
Nous voyons que Forever prend en charge de nombreux éléments de commande et de configuration, qui devraient être un outil de gestion de ligne de commande.
3. Explication chinoise de la ligne de commande pour toujours
Actions de sous-commande:
La copie de code est la suivante:
Démarrer: démarrer le processus de démon
Arrêtez: Arrêtez le démon
Stopall: Arrêtez tous les processus pour toujours
Redémarrer: redémarrer le démon
Restartall: Redémarrez tous les processus Foever
Liste: la liste affiche le processus pour toujours
config: répertorier tous les éléments de configuration de l'utilisateur
SET <CIED> <VAL>: Définir les éléments de configuration de l'utilisateur
Effacer <Tey>: Effacer les éléments de configuration de l'utilisateur
Journaux: répertorie les journaux pour tous les processus pour toujours
Journaux <script | index>: afficher le dernier journal
Colonnes Ajouter <Col>: Métriques personnalisées à Liste Forever
Colonnes RM <Col>: Supprimez la métrique de la liste pour toujours
Colonnes Set <Cols>: Définissez toutes les mesures sur la liste pour toujours
Cleanlogs: Supprimer tous les journaux d'historique pour toujours
Options des paramètres de configuration:
La copie de code est la suivante:
-m max: nombre de fois que le script spécifié est exécuté
-L Logfile: le journal de sortie à logfile
-o OutFile: Informations sur la console de sortie à OverFile
-e errfile: Erreur de console de sortie dans Errfile
-p chemin: répertoire racine
-c Commande: Exécutez la commande, la valeur par défaut est le nœud
-A, APPEND: Merge des journaux
-F, FIFO: sortie du journal de streaming
-N, numéro: nombre de lignes d'impression de journal
pidfile: fichier pid
Sourcedir: répertoire de code source
Minuptime: temps de mise à jour de spinn minimum (MS)
Spinsleeptime: l'intervalle entre deux spins
Couleurs: coloriage de sortie de la console
Plain: Alias sans couleur, sortie de la console incolore
-d, débogage: mode de débogage
-v, verbeux: imprimer une sortie détaillée
-s, silencieux: n'imprimez pas les journaux et les messages d'erreur
-W, Watch: Monitor Modifications des fichiers
Watchdirectory: surveiller le répertoire supérieur
WatchIgnore: ignorer la surveillance via la correspondance des motifs
-H, Aide: Informations sur l'aide à la ligne de commande
4. Gestion pour toujours des serveurs
Créez un projet Web (Express3 + EJS) et utilisez pour toujours pour gérer le serveur.
Installer Express3
La copie de code est la suivante:
~ D: / workspace / javascript> express -e nodejs-forever
~ D: / workspace / javascript> cd nodejs-forever && npm install
Démarrez l'application via pour toujours
La copie de code est la suivante:
~ D: / workspace / javascript / nodejs-forever> pour toujours start app.js
AVERTISSEMENT: - minUptime non réglé. Défaut à: 1000ms
Warn: - Spinsleeptime non réglé. Votre script sortira s'il ne reste pas debout pendant au moins 1000 ms
Info: Fichier de traitement pour toujours: app.js
Ouvrez le navigateur: http: // localhost: 3000, vous pouvez voir l'interface Web
Vérifiez le statut Forever Under Win
La copie de code est la suivante:
~ D: / workspace / javascript / nodejs-forever> Liste pour toujours
Info: pas de processus pour toujours en cours d'exécution
~ D: / workspace / javascript / nodejs-forever> stop app.js pour toujours
Erreur: pour toujours ne pas trouver le processus avec l'index: app.js
Nous avons constaté que le programme Forever fonctionnait mal! ! Le programme est clairement dans son état de course, mais il ne peut pas être vu à travers la liste. Ensuite, passez à Linux Ubuntu et continuez à tester.
5. Forever gère les serveurs à Ubuntu
Environnement du système Linux
Linux: serveur Ubuntu 12.04.2 64 bits
Node: v0.11.2
NPM: 1.2.21
Projet d'initialisation: la commande d'installation n'est pas expliquée
La copie de code est la suivante:
~ CD / Home / Conan / Nodejs
~ express -e nodejs-forever
~ CD Nodejs-forever && npm install
~ Sudo NPM Install Forever -g
Commencer pour toujours
Copiez le code comme suit: ~ pour toujours démarrer app.js
AVERTISSEMENT: - minUptime non réglé. Défaut à: 1000ms
Warn: - Spinsleeptime non réglé. Votre script sortira s'il ne reste pas debout pendant au moins 1000 ms
Info: Fichier de traitement pour toujours: app.js
Vérifier l'état du serveur de nœuds
Copiez le code comme suit: ~ Liste pour toujours
Info: les processus pour toujours en cours d'exécution
Données: UID Command Script Forever Pid Logfile Up-temps
Données: [0] l2ty / usr / local / bin / node app.js 18276 18279 /home/conan/.forever/l2ty.log 0: 0: 0: 37.792
# Processus système
~ PS -Aux | Node grep
AVERTISSEMENT: Bad PS Syntax, peut-être un faux '-'? Voir http://props.sf.net/faq.html
Conan 18296 0,5 1,1 597696 23776? Ssl 15:48 0:00 / usr / local / bin / node / usr / local / lib / node_modules / forever / bin / monitor app.js
Conan 18299 0,4 0,8 630340 18392? SL 15:48 0:00 / USR / LOCAL / BIN / NODE /HOME/CONAN/NODEJS/NODEJS-Forever/App.js
# Occupation du port
~ netStat -Nltp | nœud grep
TCP 0 0 0.0.0.0:3000 0.0.0.0:* Écoutez 18299 / Node
Arrêter le serveur
Copiez le code comme suit: ~ Stop app.js pour toujours
Info: Processus pour toujours arrêté:
Données: UID Command Script Forever Pid Logfile Up-temps
[0] l2ty / usr / local / bin / nœud app.js 18276 18279 /home/conan/.forever/l2ty.log 0: 0: 0: 45.621
Nous voyons qu'il est normal dans l'environnement Linux Ubuntu.
6. Simuler les temps d'arrêt du serveur
Deux solutions de test:
1. Utilisez les commandes Linux pour tuer directement le processus de nœud
2. Dans l'application, simulez la sortie de l'exception
1). Utilisez des commandes Linux pour tuer directement le processus de nœud
La copie de code est la suivante:
# Vérifiez le processus de nœud, PID = 18299
~ PS -Aux | Node grep
Conan 18296 0,0 1,1 597696 23776? Ssl 15:48 0:00 / usr / local / bin / node / usr / local / lib / node_modules / forever / bin / monitor app.js
Conan 18299 0,0 0,8 630340 18392? SL 15:48 0:00 / USR / LOCAL / BIN / NODE /HOME/CONAN/NODEJS/NODEJS-Forever/App.js
Conan 18315 0,0 0,0 13584 956 pts / 5 r + 15:52 0:00 grep --color = nœud automatique
# Kill Pid = 19299
~ Kill -9 18299
# Regardez à nouveau le processus de nœud, le nœud redémarre automatiquement, le nouveau PID = 18324
~ PS -Aux | Node grep
Conan 18296 0,0 1,1 597696 23916? Ssl 15:48 0:00 / usr / local / bin / node / usr / local / lib / node_modules / forever / bin / monitor app.js
Conan 18316 2,6 0,8 630340 18412? SL 15:52 0:00 / USR / LOCAL / BIN / NODE /HOME/CONAN/NODEJS/NODEJS-Forever/App.js
Conan 18324 0,0 0,0 13584 956 pts / 5 r + 15:52 0:00 grep --color = nœud automatique
Nous voyons que tuer le processus de nœud, pour toujours nous aidera à redémarrer le nœud.
Tuez pour toujours Monitor
La copie de code est la suivante:
~ Kill -9 18296
~ PS -Aux | Node grep
Conan 18316 0,0 0,9 630340 18644? SL 15:52 0:00 / USR / LOCAL / BIN / NODE /HOME/CONAN/NODEJS/NODEJS-Forever/App.js
Conan 18333 0,0 0,0 13584 952 pts / 5 s + 15:57 0:00 grep --color = nœud automatique
# Tuez à nouveau le processus de nœud
~ Kill -9 18316
~ PS -Aux | Node grep
Conan 18336 0,0 0,0 13584 956 pts / 5 s + 15:58 0:00 grep --color = nœud automatique
Nous avons essayé de tuer le moniteur de Forever. Le programme Monitor n'a pas redémarré automatiquement. Après avoir tué le processus de nœud, le nœud ne redémarre pas automatiquement.
2). Dans l'application, simulez la sortie de l'exception
Modifier le fichier: app.js
La copie de code est la suivante:
~ vi app.js
// ..
http.createServer (app) .Listen (app.get ('port'), function () {
console.log (new Date ());
Console.log ('Express Server écoutant sur le port' + app.get ('port'));
});
setTimeout (function () {
console.log (new Date ());
Jetez une nouvelle erreur («l'application est une erreur de Inner!»);
}, 10 * 1000);
Commencez par la commande nœud
Copiez le code comme suit: ~ Node app.js
Jeu 26 septembre 2013 16:08:44 GMT + 0800 (CST)
Serveur express écoute sur le port 3000
Je 26 septembre 2013 16:08:54 GMT + 0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
Jetez une nouvelle erreur («l'application est une erreur de Inner!»);
^
Erreur: l'application est une erreur de l'intérieur!
sur null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
sur timer.listontimeout [comme ontimeout] (timers.js: 110: 15)
Après 10 secondes, le processus de nœud est suspendu en raison d'une erreur interne.
Commencez par la commande Forever
La copie de code est la suivante:
~ Journaux MKDIR
~ CHMOD 777 -R Journaux
~ pour toujours -p. -l ./logs/access.log -e ./logs/error.log start app.js
# Vérifiez le journal d'erreur
~ Cat Logs / Access.log LS
Jeu 26 septembre 2013 16:15:02 GMT + 0800 (CST)
Serveur express écoute sur le port 3000
Jeu 26 septembre 2013 16:15:12 GMT + 0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
Jetez une nouvelle erreur («l'application est une erreur de Inner!»);
^
Erreur: l'application est une erreur de l'intérieur!
sur null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
sur timer.listontimeout [comme ontimeout] (timers.js: 110: 15)
Erreur: script pour toujours détecté sorti avec le code: 8
Erreur: redémarrage pour toujours pour 1 fois
Jeu 26 septembre 2013 16:15:13 GMT + 0800 (CST)
Serveur express écoute sur le port 3000
Jeu 26 septembre 2013 16:15:23 GMT + 0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
Jetez une nouvelle erreur («l'application est une erreur de Inner!»);
^
Erreur: l'application est une erreur de l'intérieur!
sur null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
sur timer.listontimeout [comme ontimeout] (timers.js: 110: 15)
Erreur: script pour toujours détecté sorti avec le code: 8
Erreur: redémarrage pour toujours pour 2 fois
Jeu 26 septembre 2013 16:15:23 GMT + 0800 (CST)
Serveur express écoute sur le port 3000
Jeu 26 septembre 2013 16:15:33 GMT + 0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
Jetez une nouvelle erreur («l'application est une erreur de Inner!»);
^
Erreur: l'application est une erreur de l'intérieur!
sur null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
sur timer.listontimeout [comme ontimeout] (timers.js: 110: 15)
Erreur: script pour toujours détecté sorti avec le code: 8
Erreur: redémarrage pour toujours pour 3 fois
Jeu 26 septembre 2013 16:15:33 GMT + 0800 (CST)
Serveur express écoute sur le port 3000
Jeu 26 septembre 2013 16:15:43 GMT + 0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
Jetez une nouvelle erreur («l'application est une erreur de Inner!»);
^
Erreur: l'application est une erreur de l'intérieur!
sur null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
sur timer.listontimeout [comme ontimeout] (timers.js: 110: 15)
Erreur: script pour toujours détecté sorti avec le code: 8
Erreur: redémarrage pour toujours pour 4 fois
Nous avons constaté que toutes les 10 secondes, le nœud raccroche en interne et est ensuite redémarré par toujours! !
Grâce à la liste, nous pouvons également voir que le PID a changé plusieurs fois.
La copie de code est la suivante:
~ Liste pour toujours
Info: les processus pour toujours en cours d'exécution
Données: UID Command Script Forever Pid Logfile Up-temps
Données: [0] SMTT / USR / LOCAL / BIN / NODE APP.JS 18444 18579 Journaux / Access.log 0: 0: 0: 7.211
~ Liste pour toujours
Info: les processus pour toujours en cours d'exécution
Données: UID Command Script Forever Pid Logfile Up-temps
Données: [0] SMTT / USR / LOCAL / BIN / NODE APP.JS 18444 18579 Journaux / Access.log 0: 0: 0: 8.921
~ Liste pour toujours
Info: les processus pour toujours en cours d'exécution
Données: UID Command Script Forever Pid Logfile Up-temps
Données: [0] SMTT / USR / LOCAL / BIN / NODE APP.JS 18444 18604 Journaux / Access.log 0: 0: 0: 0.177
~ Liste pour toujours
Info: les processus pour toujours en cours d'exécution
Données: UID Command Script Forever Pid Logfile Up-temps
Données: [0] SMTT / USR / LOCAL / BIN / NODE APP.JS 18444 18604 Journaux / Access.log 0: 0: 0: 2.206
De cette façon, nous aide à jamais à remplir plusieurs fonctions de gestion des serveurs importantes: "Commande simple start / stop", "Support Hot Deployment", "Télécharger Restart" et "Surveillant l'interface et les journaux".
Par rapport à la gestion de Upstart, les étapes pour configurer les scripts (/etc/init/nodejs-xx.conf) sont omises. D'autres fonctions doivent être utilisées un pas de plus à savoir.
7. Configuration de démarrage de l'environnement de développement et de l'environnement de production
Environnement de développement
La copie de code est la suivante:
~ cd / home / conan / nodejs / nodejs-forever /
~ pour toujours -p. -l ./logs/access.log -e ./logs/error.log -a -w start app.js
Environnement de production
Copiez le code comme suit: ~ Export log = / var / log / nodejs / project
~ Export Pid = / var / log / nodejs / project / Forever.pid
~ exporter app_path = / home / conan / nodejs / nodejs-forever
~ Export app = $ app_path / app.js
~ Forever -p $ app_path -l $ log / access.log -e $ log / error.log -o $ log / out.log -a --pidfile $ pid start $ app