Stellen Sie sicher, dass immer ein Prozess ausgeführt wird

23

Ich habe vor einiger Zeit angefangen, Websites mit Cherokee zu hosten. Bei externen Quellen (FastCGI usw.) besteht die Möglichkeit, den Prozess zu starten, wenn keine auf dem angegebenen Socket oder Port ausgeführt wird. Dies ist großartig, da PHP oder eine Django-Site automatisch neu gestartet wird, wenn sie (wie gelegentlich) abstürzt.

Auf einem neuen Server mit PHP-FPM konnte ich Cherokee nicht verwenden (es hat einen Fehler mit PHP), also bin ich zu NGINX gewechselt. Ich mag NGINX (wegen seines Konfigurationsstils) sehr, aber ich habe ernsthafte Probleme mit Prozessen, die umkippen und nie wieder auftauchen. PHP tut dies manchmal, aber Django-Sites sind eher ein Problem. Ich habe Init-Skripte für sie erstellt und sie werden beim Booten gestartet, aber das hilft mir nicht, wenn sie zwischen Neustarts herausfinden.

Ich suche wohl einen FastCGI-Proxy. Etwas, das wie Cherokee weiß, welche Prozesse auf welchen Sockets / Ports ausgeführt werden sollen, und sie bei Bedarf erneut aufruft. Gibt es so etwas? Gibt es eine Möglichkeit, dies in NGINX zu integrieren (um die Konfiguration zu vereinfachen)?

Oli
quelle

Antworten:

13

Wie wäre es mit daemontools und speziell dem Überwachungstool ?

überwacht einen Dienst. Es startet den Dienst und startet den Dienst neu, wenn er stirbt. Das Einrichten eines neuen Dienstes ist einfach: Für die Überwachung ist lediglich ein Verzeichnis mit einem Ausführungsskript erforderlich, über das der Dienst ausgeführt wird.

Murilo
quelle
+1 für daemontools. Oft kann man ein Skript nicht einfach so hineinwerfen /etc/init.d/apachectl. Sie müssen häufig Ihr eigenes einfaches Startskript neu schreiben, um es zu verwenden exec. Obwohl ich gerne weitere Beispiele mit daemontools sehen würde
Stefan Lasiewski
Daemontools hat eine andere Inkarnation als Runit. Nicht so wichtig, jetzt, da daemontools gemeinfrei ist, aber eine ältere Distribution hat möglicherweise nur runit.
22.08.10
8

respawn in inittab

Stephen Jazdzewski
quelle
5

Ich schließe mich dem daemontoolsVorschlag an, aber wenn Ihnen die Funktionsweise der DJB-Software (aus welchen Gründen auch immer) nicht gefällt, gibt es sie auch supervisord.

Ich habe vor einiger Zeit ein FreeBSD-Image erstellt, das früher supervisordzum Verwalten nginxund gunicornHosten einiger einfacher WSGI-Apps verwendet wurde, und der gesamte Vorgang war recht unkompliziert.

Wenn Sie dies für Django tun, macht es Gunicorn wirklich einfach, unter anderem Django-Apps bereitzustellen. Weitere Informationen finden Sie in diesem Blogbeitrag .

Hank Gay
quelle
4

Eine andere Möglichkeit wäre, monit zu verwenden , das ist das, was ich normalerweise benutze.


quelle
3

Hast du darüber nachgedacht god?

Gott ist ein einfach zu konfigurierendes, einfach zu erweiterendes Überwachungs-Framework, das in Ruby geschrieben wurde.

Das Ausführen Ihrer Serverprozesse und -aufgaben sollte ein einfacher Teil Ihres Bereitstellungsprozesses sein. Gott möchte die einfachste und leistungsstärkste verfügbare Überwachungsanwendung sein.

Ich benutze es, um sicherzustellen, dass Rails / nginx-Instanzen wiederbelebt werden, wenn sie umfallen. Ich sehe zwar keine eingebaute Unterstützung für die Überprüfung, ob der richtige Port verwendet wird oder nicht, aber das Problem besteht darin, dass der Prozess fehlschlägt oder läuft nicht mehr, man kann nichts falsch machen god.

Chris Bunch
quelle
0

Eine Hackish-Lösung wäre, regelmäßig ein Skript (über cron) zu starten , das erkennt, ob der Prozess nicht funktioniert, und es in diesem Fall erneut zu starten.

Robert Swisher
quelle
0

Es gibt verschiedene Möglichkeiten, einen ausgefallenen Daemon neu zu starten. Die übliche Empfehlung lautet "Respawn in inittab", jedoch unter Berücksichtigung eines Grenzwerts, wenn die Maschine wirklich überlastet ist.

Der Watchdog-Daemon kann einen Prozess auch über seine PID-Datei überwachen. Dies sollte jedoch nur als sekundäre Verteidigungslinie betrachtet werden, um einen Computer neu zu starten, der zu krank ist, um ordnungsgemäß ausgeführt zu werden (z. B. zu wenig Arbeitsspeicher, Gabelbomben usw.), und nicht als primäre Methode oder zum Überwachen und Neustarten eines Daemons.

Schließlich können Sie die Überwachung komplexer Systeme mit Nagios in Betracht ziehen, um den Administratoren eine globale Ansicht zu bieten. Es kann Plug-Ins ausführen, um den Betrieb des Daemons von außen zu prüfen. Dies ist ein vollständigerer Test seiner Funktionsweise als nur die PID, die aktiv ist.

Paul Crawford
quelle
-1

Einfache Antwort - starten Sie, schreiben Sie irgendwo Ihre PID und überprüfen Sie jedes Mal (Sekunden, Minuten, Ihre Wette), ob der Prozess abgeschlossen ist.

Lange Antwort - alle oben genannten sind gute Methoden. Aber etwas kompliziert.

Denken Sie auch daran, dass es verschiedene Dinge sind, am Leben zu sein und auf Anfragen zu antworten.

Lucabotti
quelle
1
… Und drücken Sie die Daumen und hoffen Sie, dass nichts über die PID-Datei kritzelt, sie löscht, sie für einen anderen Dämon wiederverwendet oder sie auf einen anderen unschuldigen und nicht verwandten Prozess verweist, der auf die Prüfung nicht gut reagiert für wach sein. ☺ Aus diesem Grund ist die lange Antwort eines richtigen Daemon-Supervisors, der Daemons als untergeordnete Prozesse ausführt und sie mit den üblichen Unix / Linux-Systemmechanismen überwacht, der lange akzeptierte bessere Weg.
JdeBP