Ich habe einen Nginx-Webproxy, einen Gunicorn-Webserver und eine Python/Flask-Webanwendung. Der Gunicorn-Prozess ist anscheinend abgestürzt, und ich möchte das in Zukunft verbessern, indem ich nach einem Dienstprogramm suche, das den Gunicorn-Prozess überwachen und neu starten kann, falls er erneut abstürzt.
Ich habe mehrere Dienstprogramme zur Prozessüberwachung gefunden, die diese Aufgabe erfüllen können:
- daemontools
- gestartet
- starte es
- s6
- Aufsicht
- SystemD
- Emporkömmling
- ...
Gibt es einen umfassenden Artikel, der die verschiedenen Dienstprogramme zum Überwachen und Neustarten eines Prozesses vergleicht und gegenüberstellt?
Antwort1
runit
ist ein Nachfolger vondaemontools
(beide sind in geschriebenc
)supervisord
Verwendetpython
.
Ich habe runit
mit socklog
vom gleichen Autor im Inneren verwendetAlpine Linux lxc
Container für etwa 10 Monate zur Verwaltung web
/ database
& verschiedene andere Dienste. Es ist leicht, einfach zu verwalten und ich hatte keine Dienstausfälle. Der Protokollierungs-Daemon läuft auch als eigener Benutzer und nicht als eigener, root
was schön ist.
Abonnierenverwendet runit
als init
System und auch fürDienstaufsicht(Durchsuchen Sie den Paketbaum nach run
Dateien mit Beispielskripten runit
).
Antwort2
Wenn Ihre Distribution Upstart verwendet, sollten Sie es verwenden. Es bietet eine sehr grundlegende Unterstützung für den Neustart von Jobs, enthält jedoch Einschränkungen, die Neustartschleifen verhindern können, wie von @EEAA erwähnt.
Wenn Ihr Betriebssystem ein anderes Init-Programm verwendet, ändern Sie es nicht. Ich kann Ihnen bei den anderen Tools, die Sie erwähnt haben, nicht wirklich helfen, da ich im Allgemeinen Ubuntu verwende, wo Upstart noch vorhanden ist (ab der neuesten LTS), sodass ich wenig damit zu tun habe. Aber es ist keine schwierige Aufgabe, ein einfaches Skript zu erstellen, das voncroneinmal pro Minute (oder öfter, z. B. in einer Schleife), wodurch überprüft werden kann, ob ein PID vorhanden ist, und bei einem Fehler ein Neustart durchgeführt wird.