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)?
/etc/init.d/apachectl
. Sie müssen häufig Ihr eigenes einfaches Startskript neu schreiben, um es zu verwendenexec
. Obwohl ich gerne weitere Beispiele mit daemontools sehen würderespawn in inittab
quelle
Ich schließe mich dem
daemontools
Vorschlag an, aber wenn Ihnen die Funktionsweise der DJB-Software (aus welchen Gründen auch immer) nicht gefällt, gibt es sie auchsupervisord
.Ich habe vor einiger Zeit ein FreeBSD-Image erstellt, das früher
supervisord
zum Verwaltennginx
undgunicorn
Hosten 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 .
quelle
Eine andere Möglichkeit wäre, monit zu verwenden , das ist das, was ich normalerweise benutze.
quelle
Hast du darüber nachgedacht
god
?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
.quelle
Neben daemontools und supervisord gibt es daemonize .
quelle
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.quelle
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.
quelle
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.
quelle