Wenn node.js ausfällt, wie kann ich es automatisch wiederherstellen?

8

Da Knoten im Grunde ein einzelner Prozess ist, wenn etwas schrecklich schief geht, stirbt die gesamte Anwendung.

Ich habe jetzt ein paar Apps, die auf express basieren, und ich benutze einige manuelle Methoden, um längere Ausfallzeiten zu verhindern (process.on ('uncaughtException') und einen benutzerdefinierten Heartbeat-Monitor).

Irgendwelche Vorschläge von der Gemeinde? Best-Practices? Frameworks?

Danke! A

    
Aldo Bucchi 14.04.2011, 18:50
quelle

6 Antworten

5

Verwenden Sie so etwas wie forever

oder verwenden Sie supervisor .

Nur npm link und dann sudo supervisor server.js .

Diese Arten von Bibliotheken unterstützen auch das Warmladen. Es gibt einige, die Sie über die Befehlszeile verwenden, und sie führen Knoten-Services als Unterprozesse für Sie aus. Es gibt andere, die erwarten, dass Sie Ihren Code schreiben, um sich neu zu laden.

Idealerweise möchten Sie auf einen vollwertigen Lastenausgleich ausweichen, der ausfallsicher ist. Wenn ein einzelner Knoten in Ihrem Load Balancer abstürzt, sollten Sie ihn ruhig neu starten und alle Verbindungen und Daten wiederherstellen.

Persönlich würde ich supervisor für die Entwicklung empfehlen (Es wurde von isaacs geschrieben!) und einen vollständigen Lastenausgleich (entweder nginx oder node) für Ihren echten Produktionsserver.

Natürlich führen Sie bereits mehrere Server mit mehreren Knoten gleichzeitig aus, weil Sie sich für die Skalierung über mehrere Kerne interessieren;)

    
Raynos 14.04.2011, 18:53
quelle
3

Verwenden Sie für immer .

"Ein einfaches CLI-Tool, um sicherzustellen, dass ein bestimmtes Skript fortlaufend (d. h. für immer) ausgeführt wird"

Installiere es einfach mit npm

%Vor%

und geben Sie

ein %Vor%     
Pono 14.04.2011 18:56
quelle
2

Wenn Sie Ubuntu verwenden, können Sie den Upstart verwenden (der standardmäßig installiert ist).

$ cat /etc/init/my_app.conf

  

Beschreibung "my_app"   Autor "mich"

     

start on (local-filesystems und net-device-up IFACE = eth0) stop on   Herunterfahren

     

Respawn

     

exec sh -c "env NODE_ENV = Produktionsknoten /path/myapp/app.js & gt; /var/log/node.log 2 & gt; & amp; 1"

"Respawn" bedeutet, dass die App neu gestartet wird, wenn sie stirbt.

Um die App zu starten

  

starte my_app

Für andere Befehle

  

man initctl

    
brunoqc 13.08.2011 20:51
quelle
1

Sehen Sie sich das Modul für immer an.

    
yojimbo87 14.04.2011 18:54
quelle
1

Ich werde auch forever dringend empfehlen. Ich habe es gestern benutzt und es ist ein Kinderspiel:

  1. Installieren Sie npm install forever

  2. Starten Sie Ihre App forever start myapp.js

  3. Prüfe, ob es funktioniert forever list

Versuchen Sie, Ihre App zu löschen:

  1. ps

  2. Holen Sie sich Ihre myapp.js-PID und führen Sie kill <pid

  3. aus
  4. Führe forever list aus und du wirst sehen, dass es wieder läuft

neebz 14.04.2011 19:38
quelle
0

Sie können versuchen, Fugue zu verwenden, eine Bibliothek für node.js, die Spark oder Unicorn ähnelt:

Ссылка

Fugue kann alle Server vom Typ node.js verwalten, nicht nur Webserver, und es ist als node.js-Skript und nicht als CLI-Befehl eingerichtet und konfiguriert, also normales node.js build & amp; Bereitstellung Toolchains können es verwenden.

    
Joshua Tompkins 15.04.2011 13:38
quelle

Tags und Links