Lassen Sie uns als nächstes sehen, ob für immer das Ziel erreichen kann.
1. für immer Einführung
Forever ist ein einfacher imperativer NodeJS -Daemon, der App -Anwendungen starten, anhalten und neu starten kann. Forever basiert vollständig auf Befehlszeilenvorgängen. Im Rahmen des Forever -Prozesses wird ein Kinderprozess erstellt und der Knotenkindprozess über den Monitor überwacht. Sobald die Datei aktualisiert ist oder der Prozess verfallen ist, starten Sie den Knotenserver für immer automatisch neu, um sicherzustellen, dass die Anwendung normal ausgeführt wird.
2. für immer Installation
Globale Installation für immer
Die Codekopie lautet wie folgt:
~ D:/Arbeitsbereich/JavaScript> NPM Install -g für immer
D:/Toolkit/nodejs/Forever -> D:/Toolkit/NodeJS/node_modules/Forever/bin/Forever
D:/Toolkit/nodeJS/Foreverd -> D:/Toolkit/NodeJS/Node_Modules/Forever/bin/Foreverd
Schauen Sie sich für immer Hilfe an
Die Codekopie lautet wie folgt:
~ D:/Workspace/JavaScript> Forever -h
Hilfe: Nutzung: für immer [Aktion] [Optionen] Skript [Skript-Optionen]
helfen:
Hilfe: Überwacht das im aktuelle Prozess angegebene Skript oder als Daemon
helfen:
Hilfe: Aktionen:
Hilfe: Starten Sie das Skript als Daemon
Hilfe: Hören Sie auf, das Dämon -Skript zu stoppen
HILFE: Stoppen Sie, dass Sie alle für immer Skripte ausführen.
Hilfe: Starten Sie das Dämon -Skript neu neu starten
HILFE: Neustart alle laufenden Forever -Skripte neu starten
HILFE: Listen Sie auf. Listen Sie alle für Forever -Skripte auf.
Hilfe: Konfiguration listet alle für immer Benutzerkonfiguration auf
Hilfe: Setzen Sie <Key> <Cal> Legt die angegebene Forever Config <Key> fest
HILFE: Löschen <schlüssel> Löscht die angegebene Forever Config <Key>
HILFE: Protokoll -Listen -Protokolldateien für alle für immer Prozesse
Hilfe: Protokolle <Skript | Index> Verschlüsselt die Protokolle für <Skript | Index>
Hilfe: Spalten add <col> fügen die angegebene Spalte zur Ausgabe in `Forever List` hinzu
Hilfe: Spalten rm <col> haben die angegebene Spalte aus der Ausgabe in `Forever List` entfernt
HILFE: Spalten setzen <cols> Setzen Sie alle Spalten für die Ausgabe in `Forever List`
Hilfe: Cleanlogs [vorsichtig] löscht alle historischen Protokolldateien für immer für immer
helfen:
Hilfe: Optionen:
Hilfe: -m max nur das angegebene Skript maximal Male ausführen
Hilfe: -L -Logfile -Protokoll der Ausgabe für immer in Logfile
Hilfe: -O -Outfile -Protokolle Stdout von Child Skript bis Outfile
Hilfe: -e Errfile Protokolle Stderr vom untergeordneten Skript zu Erlfile
Hilfe: -P -Pfadbasispfad für alle für immer verwandten Dateien (PID -Dateien usw.)
Hilfe: -C -Befehlsbefehl zum Ausführen (Standardeinstellungen zum Knoten)
Hilfe: -a, -Append Anhangsprotokolle
Hilfe: -F, - -FIFO -Stream -Protokolle an STDOut
Hilfe: -n, -Anzahl der zum Drucken zu druckenden Protokollzeilen
HILFE: -PIDFILE Die PID -Datei
Hilfe: -Sourcedir Das Quellverzeichnis, für das das Skript relativ zu ist
Hilfe: -Minuptime Mindestzeit (Millis), damit ein Skript nicht als "Spinnen" betrachtet wird
HILFE: -Spinsleeptime Time zum Warten (Millis) zwischen den Starts eines sich drehenden Skripts.
HILFE:-Farben-NICHT-Farben deaktivieren die Ausgangsfärbung
Hilfe:-plain alias von-no-colors
Hilfe: -d, -Debug Forces Forever, Debug -Ausgabe zu log
Hilfe: -V, --verbose schaltet die ausführlichen Nachrichten von Forever aus
Hilfe: -s, -Silent Führen Sie das Child -Skript aus, das Stdout und Stderr stummschweist
Hilfe: -W, -Watch Uhr für Dateiänderungen
Hilfe:-WatchDirectory Top-Level-Verzeichnis zum Anschauen
Hilfe: -Watchignore, um das Muster zu ignorieren, wenn die Uhr aktiviert ist (mehrere Option ist zulässig)
Hilfe: -h, -Help, Sie starren es an
helfen:
Hilfe: [Langlaufer Prozess]
HILFE: Der Forever -Prozess wird weiterhin Ausgabetlog -Nachrichten an die Konsole ausführen.
HILFE: Bsp. Forever -o out.log -e err.log my -script.js
helfen:
Hilfe: [Daemon]
HILFE: Der Forever -Prozess wird als Daemon ausgeführt, wodurch der Zielprozess beginnt
Hilfe: Im Hintergrund. Dies ist äußerst nützlich, damit die Remote -Start einfacher Node.js -Skripte starten kann
Hilfe: Ohne NoHup. Es wird empfohlen, mit -O -l, & -e zu beginnen.
HILFE: Bsp. Forever Start -l für immer.log -o out.log -e err.log my -daemon.js
Hilfe: Halten Sie für immer my-daemon.js auf
helfen:
Wir sehen, dass für immer viele Befehls- und Konfigurationselemente unterstützt, die ein Befehlszeilenverwaltungswerkzeug sein sollten.
3. Chinesische Erklärung der Forever Command Line
Unterbefehlsaktionen:
Die Codekopie lautet wie folgt:
Start: Starten Sie den Dämon -Prozess
Stopp: Stoppen Sie den Daemon
Stopp: Stoppen Sie alle für immer Prozesse für immer
Neustart: Starten Sie den Daemon neu
Neustartall: Alle Foever -Prozesse neu starten
LISTE: LISTE Zeigt den Forever -Prozess an
Konfiguration: Listen Sie alle Benutzerkonfigurationselemente auf
Setzen Sie <Key> <val>: Setzen Sie Benutzerkonfigurationselemente
Löschen <schlüssel>: Löschen Sie Benutzerkonfigurationselemente
Protokolle: Listet Protokolle für alle für immer Prozesse auf
Protokolle <Skript | Index>: Zeigen Sie das neueste Protokoll an
Spalten fügen <Col>: benutzerdefinierte Metriken zur für immer gelistenden Liste hinzu
Spalten RM <Kol>: Entfernen Sie die für die für die für die Listenmetrik
Spalten setzen <cols>: Setzen Sie alle Metriken auf die für immer Liste
Cleanlogs: Alle für die für die Geschichtsprotokolle für die Forever -Geschicht löschen
Konfigurationsparameteroptionen:
Die Codekopie lautet wie folgt:
-M max: Häufigkeit, mit der das angegebene Skript ausgeführt wird
-l logfile: Ausgabeprotokoll für logfile ausgab.
-O -Outfile: Ausgangskonsoleninformationen zum Outfile
-e Errfile: Ausgabetonsole -Fehler in ERRFILE
-P Pfad: Root Directory
-C -Befehl: Führen Sie den Befehl aus, der Standard ist Knoten
-a, anhängen: Protokolle zusammenführen
-F, FIFO: Streaming -Protokollausgabe
-n, Nummer: Anzahl der Protokolldruckzeilen
PIDFILE: PID -Datei
Sourcedir: Quellcode -Verzeichnis
Minuptime: Minimale Spinn -Update -Zeit (MS)
Spinsleptime: das Intervall zwischen zwei Spins
Farben: Konsolenausgabefärbung
Ebene: No-Color Alias, Konsolenausgabe farblos
-D, Debug: Debug -Modus
-V, ausführlich: detaillierte Ausgabe drucken
-S, still: Drucken Sie keine Protokolle und Fehlermeldungen aus
-W, Uhr: Überwachen Sie die Dateiänderungen
WatchDirectory: Überwachen Sie das Top -Verzeichnis
Watchignore: Ignorieren Sie die Überwachung über Musteranpassung
-h, Hilfe: Befehlszeilenhilfe Informationen
4. Forever Server Management
Erstellen Sie ein Webprojekt (Express3+EJS) und verwenden Sie für immer den Server.
Installieren Sie Express3
Die Codekopie lautet wie folgt:
~ D:/Arbeitsspace/JavaScript> Express -e Nodejs -Forever
~ D:/Workspace/JavaScript> CD nodejs-Forever && npm Installation
Starten Sie die Anwendung über für immer
Die Codekopie lautet wie folgt:
~ D:/Arbeitsspace/JavaScript/NodeJS-Forever> Forever Start App.js
Warnung: -Minuptime nicht gesetzt. Auffall zu: 1000 ms
WARN: -Spinsleptime nicht gesetzt. Ihr Skript wird beendet, wenn es nicht mindestens 1000 ms aufbleibt
Info: Forever Processing Datei: app.js
Öffnen Sie den Browser: http: // localhost: 3000, Sie können die Webschnittstelle sehen
Überprüfen Sie den Forever -Status unter Gewinn
Die Codekopie lautet wie folgt:
~ D:/Workspace/JavaScript/NodeJS-Forever> Forever List
Info: Keine für immer ausgeführten Prozesse für immer
~ D:/Arbeitsspace/JavaScript/NodeJS-Forever> Forever Stop App.js
Fehler: Für immer kann der Prozess mit Index nicht finden: app.js
Wir haben festgestellt, dass das Forever -Programm falsch funktioniert! ! Das Programm befindet sich eindeutig in seinem laufenden Zustand, kann aber nicht durch die Liste erkennen. Wechseln Sie als nächstes zu Linux Ubuntu und testen Sie weiter.
5. für immer verwaltet Server in Ubuntu
Linux -Systemumgebung
Linux: Ubuntu 12.04.2 64bit Server
Knoten: v0.11.2
NPM: 1.2.21
Initialisierungsprojekt: Der Installationsbefehl wird nicht erläutert
Die Codekopie lautet wie folgt:
~ cd/home/conan/nodejs
~ Express -e Nodejs -Feurer
~ CD nodejs-Forever && npm installieren
~ sudo npm für immer -g installieren
Fang für immer an
Kopieren Sie den Code wie folgt: ~ für immer starten app.js
Warnung: -Minuptime nicht gesetzt. Auffall zu: 1000 ms
WARN: -Spinsleptime nicht gesetzt. Ihr Skript wird beendet, wenn es nicht mindestens 1000 ms aufbleibt
Info: Forever Processing Datei: app.js
Überprüfen Sie den Status des Knotenservers
Kopieren Sie den Code wie folgt: ~ für immer Liste
Info: Für immer laufende Prozesse
Daten: UID -Befehlskript für immer PID Logfile -Verfügbarkeit
Daten: [0] l2ty/usr/local/bin/node app.js 18276 18279 /home/conan/.forever/l2ty.log 0: 0: 0: 37.792
# Systemprozess
~ ps -aux | Grep -Knoten
WARNUNG: Schlechte PS-Syntax, vielleicht ein falscher '-'? Siehe http://procps.sf.net/faq.html
Conan 18296 0,5 1.1 597696 23776? Ssl
Conan 18299 0,4 0,8 630340 18392? SL 15:48 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
# Hafenberuf
~ netstat -nltp | Grep -Knoten
TCP 0 0 0.0.0.0:3000 0.0.0.0:* Hören Sie 18299/Knoten an
Stoppen Sie den Server
Kopieren Sie den Code wie folgt: ~ für immer stoppen app.js
Info: Forever stoppte Prozess:
Daten: UID -Befehlskript für immer PID Logfile -Verfügbarkeit
[0] l2ty/usr/local/bin/node app.js 18276 18279 /home/conan/.forever/l2ty.log 0: 0: 0: 45.621
Wir sehen, dass es in der Linux -Ubuntu -Umgebung normal ist.
6. Simulieren die Serverausfallzeiten
Zwei Testlösungen:
1. Verwenden Sie Linux -Befehle, um den Knotenprozess direkt abzutöten
2. In der Anwendung simulieren
1). Verwenden Sie Linux -Befehle, um den Knotenprozess direkt abzutöten
Die Codekopie lautet wie folgt:
# Überprüfen Sie den Knotenprozess, PID = 18299
~ ps -aux | Grep -Knoten
Conan 18296 0,0 1.1 597696 23776? Ssl
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 Punkte/5 R+ 15:52 0:00 Grep --farbe = Autoknoten
# Kill PID = 19299
~ töten -9 18299
# Sehen Sie sich den Knotenprozess erneut an, der Knoten wird automatisch neu gestartet, das neue PID = 18324
~ ps -aux | Grep -Knoten
Conan 18296 0,0 1.1 597696 23916? Ssl
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 Punkte/5 R+ 15:52 0:00 Grep --farbe = Autoknoten
Wir sehen, dass das Töten des Knotenprozesses für immer uns helfen wird, den Knoten neu zu starten.
Töte für immer Monitor
Die Codekopie lautet wie folgt:
~ töten -9 18296
~ ps -aux | Grep -Knoten
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 Punkte/5 S+ 15:57 0:00 Grep --farbe = Autoknoten
# Töten Sie den Knotenprozess erneut
~ töten -9 18316
~ ps -aux | Grep -Knoten
Conan 18336 0,0 0.0 13584 956 Punkte/5 S+ 15:58 0:00 Grep --farbe = Autoknoten
Wir haben versucht, Forevers Monitor zu töten. Das Monitorprogramm hat nicht automatisch neu gestartet. Nach dem Töten des Knotenprozesses startet der Knoten nicht automatisch neu.
2). Simulieren
Datei ändern: app.js
Die Codekopie lautet wie folgt:
~ vi App.js
// .. ..
http.createServer (App) .Listen (app.get ('port'), function () {
console.log (neues Datum ());
console.log ('Express Server -Anhören auf Port' + app.get ('port'));
});
setTimeout (function () {
console.log (neues Datum ());
Neuen Fehler werfen ('App ist Fehler von Inner!');
}, 10*1000);
Beginnen Sie mit dem Befehl node
Kopieren Sie den Code wie folgt: ~ Node App.js
Do 26. September 2013 16:08:44 GMT+0800 (CST)
Express Server, der Port 3000 anhört
Do 26. September 2013 16:08:54 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
Neuen Fehler werfen ('App ist Fehler von Inner!');
^
Fehler: App ist Fehler von Inner!
bei null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
bei Timer.Listontimeout [als Ontimeout] (Timers.js: 110: 15)
Nach 10 Sekunden hängt der Knotenprozess aufgrund eines internen Fehlers.
Beginnen Sie mit dem Forever -Befehl
Die Codekopie lautet wie folgt:
~ Mkdir -Protokolle
~ Chmod 777 -r -Protokolle
~ Forever -p. -l ./logs/access.log -e ./logs/error.log start app.js
# Überprüfen Sie das Fehlerprotokoll
~ CAT -Protokolle/Access.log ls
Do 26. September 2013 16:15:02 GMT+0800 (CST)
Express Server, der Port 3000 anhört
Do 26. September 2013 16:15:12 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
Neuen Fehler werfen ('App ist Fehler von Inner!');
^
Fehler: App ist Fehler von Inner!
bei null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
bei Timer.Listontimeout [als Ontimeout] (Timers.js: 110: 15)
Fehler: Für immer erkannte Skript mit Code beendet: 8
Fehler: Das Skript für immer für 1 Mal neu starten
Do 26. September 2013 16:15:13 GMT+0800 (CST)
Express Server, der Port 3000 anhört
Do 26. September 2013 16:15:23 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
Neuen Fehler werfen ('App ist Fehler von Inner!');
^
Fehler: App ist Fehler von Inner!
bei null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
bei Timer.Listontimeout [als Ontimeout] (Timers.js: 110: 15)
Fehler: Für immer erkannte Skript mit Code beendet: 8
ERROR: Das Skript für immer für 2 Mal neu starten
Do 26. September 2013 16:15:23 GMT+0800 (CST)
Express Server, der Port 3000 anhört
Do 26. September 2013 16:15:33 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
Neuen Fehler werfen ('App ist Fehler von Inner!');
^
Fehler: App ist Fehler von Inner!
bei null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
bei Timer.Listontimeout [als Ontimeout] (Timers.js: 110: 15)
Fehler: Für immer erkannte Skript mit Code beendet: 8
ERROR: Das Skript für immer 3 Mal neu starten
Do 26. September 2013 16:15:33 GMT+0800 (CST)
Express Server, der Port 3000 anhört
Do 26. September 2013 16:15:43 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
Neuen Fehler werfen ('App ist Fehler von Inner!');
^
Fehler: App ist Fehler von Inner!
bei null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
bei Timer.Listontimeout [als Ontimeout] (Timers.js: 110: 15)
Fehler: Für immer erkannte Skript mit Code beendet: 8
ERROR: Das Skript für immer für 4 Mal neu starten
Wir haben festgestellt, dass der Knoten alle 10 Sekunden intern auflegt und dann von für immer neu gestartet wird! !
Durch die Liste können wir auch sehen, dass sich die PID mehrmals verändert hat.
Die Codekopie lautet wie folgt:
~ für immer Liste
Info: Für immer laufende Prozesse
Daten: UID -Befehlskript für immer PID Logfile -Verfügbarkeit
Daten: [0] SMTT/USR/LOCAL/BIN/NODE APP.JS 18444 18579 Protokolle/Zugriff.log 0: 0: 0: 7.211
~ für immer Liste
Info: Für immer laufende Prozesse
Daten: UID -Befehlskript für immer PID Logfile -Verfügbarkeit
Daten: [0] SMTT/USR/LOCAL/BIN/NODE APP.JS 18444 18579 Protokolle/Zugriff.log 0: 0: 0: 8.921
~ für immer Liste
Info: Für immer laufende Prozesse
Daten: UID -Befehlskript für immer PID Logfile -Verfügbarkeit
Daten: [0] SMTT/USR/LOCAL/BIN/NODE APP.JS 18444 18604 Protokoll/Access.log 0: 0: 0: 0.177
~ für immer Liste
Info: Für immer laufende Prozesse
Daten: UID -Befehlskript für immer PID Logfile -Verfügbarkeit
Daten: [0] SMTT/USR/LOCAL/BIN/NODE APP.JS 18444 18604 Protokoll/Access.log 0: 0: 0: 2.206
Auf diese Weise hilft uns Forever, mehrere wichtige Serververwaltungsfunktionen auszufüllen: "Einfacher Start/Stop -Befehl", "HOT -Bereitstellung", "Neustart herunterladen" und "Überwachung der Schnittstelle und Protokolle".
Im Vergleich zur Upstart-Verwaltung werden die Schritte zum Konfigurieren von Skripten (/etc/init/nodejs-xx.conf) weggelassen. Andere Funktionen müssen einen Schritt näher zum Wissen verwendet werden.
7. Startup -Konfiguration der Entwicklungsumgebung und der Produktionsumgebung
Entwicklungsumfeld
Die Codekopie lautet wie folgt:
~ cd/home/conan/nodejs/nodejs-Forever/
~ Forever -p. -l ./logs/access.log -e ./logs/error.log -a -w starten app.js
Produktionsumgebung
Kopieren Sie den Code wie folgt: ~ exportieren log =/var/log/nodejs/project exportieren
~ exportieren pid =/var/log/nodejs/project/Forever.pid
~ export app_path =/home/conan/nodejs/nodejs-Forever
~ export app = $ app_path/app.js
~ Forever -p $ app_path -l $ log/access.log -e $ log/error.