2016-04-28 44 views
1

Ich habe meine App läuft auf http://talkwithstranger.com/ und ich habe es auf AWS EC2 bereitgestellt. Ich benutze diesen BefehlAmazon EC2 NodeJS Server stoppt sich selbst nach 2 Tagen, auch nach der Verwendung von sudo nohup

sudo nohup node index.js & 

Zu meinem Knoten JS-Server weiterlaufen, auch wenn ich meinen Terminal schließen und meine SSH verlassen.

Allerdings, nach 2 Tagen jedes Mal, wenn ich aufwache und ich finde, dass der Knoten-Server selbst automatisch stoppt. Ich habe die laufenden Prozesse überprüft mit

ps -ef 

und meine Node-Skript ist nicht da.

Google Chrome sagen Site-DNS nicht gefunden, weil die NodeJS Express nicht natürlich ausgeführt wird, um meine HTML-Datei zu dienen. aber warum hört es auf ??

Was verursacht dieses unerwartete Herunterfahren meines Servers nach 2 Tagen? Ich muss nohup manuell erneut ausführen, um es erneut auszuführen.

Hat nohup eine Zeit zu verfallen oder etwas?

Irgendwelche Ideen?

Vielen Dank im Voraus

+0

Wahrscheinlich eine nicht abgefangene Ausnahme, die möglicherweise durch ein Speicherleck verursacht wurde. Überprüfen Sie die Unterseite Ihrer 'nohup.out' – Paulpro

+0

@Paulpro Ich überprüft meine nohup.out-Datei. Vermerkt die Datei nohup, out auch Fehler? Wie kann ich eine solche nicht abgefangene Ausnahme verfolgen, weil sie nur nachts passiert, wenn ich schlafe? Gibt es eine Möglichkeit, NodeJS automatisch neu zu starten, indem Sie die URL der Site anpingen und keine Antwort kommt? – Faizan

+0

@Paulpro Ich habe gerade diese Anweisung in meiner nohup, out-Datei gefunden, die die Ausgabe der Node-Konsole in eine Datei sendet. FATAL ERROR: Die Semiplatzierung ist fehlgeschlagen. Zuordnung fehlgeschlagen - Prozess nicht genügend Speicher Könnte dies ein Grund sein? Wie kann ich meinem Node-Prozess mehr Speicher zuweisen? – Faizan

Antwort

1

Sie können forever .Parametrier versuchen folgenden Befehl.

npm install -g forever 

Dann starten Sie einfach für immer:

forever start index.js 
+0

Wie für immer ist anders als nohup ?? – Faizan

+1

Im Falle von für immer, wird es Node im Falle eines Absturzes neu starten. Ich denke, dass Ihre Knoten-Anwendung irgendeine Ausnahme erzeugt, deshalb wird sie unterbrochen. –

+0

Nach dem Laufen für immer starten index.js wie kann ich mein Skript stoppen, wenn ich es selbst stoppen möchte? – Faizan

1

Sie node.js mit einem Service/Prozess-Manager ausgeführt werden soll. Sie können etwas Grundlegendes wie forever oder supervisord verwenden, aber ich würde Ihnen tatsächlich empfehlen, einen Blick auf PM2 zu werfen.

Es kann viele Dinge tun - eine davon ist, dass es Ihren Prozess verwaltet, dafür sorgt, dass es weiterläuft, startet es neu, wenn es fehlschlägt, verwaltet die Protokolle usw. Sie können es auch automatisch starten lassen Server.

Es wird sehr leistungsfähig in Kombination mit http://keymetrics.io (es gibt auch einen freien Plan), weil Sie die Metriken des Servers wie CPU und Speicher remote überwachen können und sehen, ob Ausnahmen aufgetreten sind (die bezahlten Pläne senden Ihnen auch Warnungen) und vieles mehr (z. B. das Aktualisieren der Software aus der Ferne durch Ziehen von Git).

Die grundsätzliche Verwendung von PM2:

npm install -g pm2 

... PM2 zu installieren.

Startet ein Skript und lässt es im Hintergrund laufen.

pm2 status 

Zeigt den Status aller laufenden Skripts an.

pm2 restart all 

Startet alle laufenden Skripts neu.

pm2 logs 

Überwacht die CPU/RAM-Auslastung und zeigt sie an.

Zeigt die letzten 20 Ausgabe- und Fehlerprotokollzeilen an und beginnt mit der Übertragung von Live-Protokollen an die Konsole. Die Protokolle werden im Ordner ~/.pm2/logs gespeichert.

Mit PM2 wird Ihr Skript nicht gestoppt - es wird höchstens neu gestartet. Und wenn dies der Fall ist, können Sie leichter nachvollziehen, warum Sie Protokolle aufrufen und beobachten können, was mit der Speicherbelegung usw. passiert.

+0

Gerade gefunden, diese Aussage in meinem nohup, out-Datei Die Ausgabe der Knotenkonsole wird an eine Datei gesendet. FATAL ERROR: Die Übertragung des Semi-Space ist fehlgeschlagen. Zuweisung fehlgeschlagen - Prozess nicht genügend Speicher Kann dies ein Grund sein? Wie kann ich meinem Node-Prozess mehr Speicher zuweisen? Oder wie man dieses Problem beheben kann? – Faizan

+1

Sie müssen Ihr Speicherleck loswerden. Siehe https://www.toptal.com/nodejs/debugging-memory-leaks-node-js-applications zum Beispiel. – CherryDT

+0

Vielen Dank @cherryDT, ich werde über die Verwendung von Pm wie vorgeschlagen, ich bin derzeit für immer verwenden, aber mein Server stürzt immer noch, können Sie bitte hier und lassen Sie mich wissen, was denken Sie, wie kann ich Knoten js Fehler beheben? Ich bin sicher, dass Sie als Experte in JS helfen können. meine Frage http://stackoverflow.com/questions/37570346/node-js-app-crashing-itself-even-after-using-forever-js/37571484?noredirect=1#comment62633618_37571484 – Faizan