Wie man rabbitmq mit supervisord richtig handhabt
Den aktuellen Abschnitt in meinem supervisord.conf sieht wie folgt aus:
[Programm:rabbitmq]
command=/usr/sbin/rabbitmq-server
Wenn ich versuche zu stoppen, die rabbitmq mit supervisord ( supervisorctl stop rabbitmq), die rabbitmq-Prozesse einfach nicht Herunterfahren. Der rabbitmq-Dokumentation auch erwähnt, verwenden Sie niemals töten, sondern eher die rabbitmqctl stoppen . Ich vermute, supervisord einfach tötet die Prozesse, daher auch die schlechten Ergebnisse mit rabbitmq. Ich konnte keine Optionen in der supervisord, geben Sie eine benutzerdefinierte Stopp-Befehl.
Haben Sie irgendwelche Empfehlungen?
InformationsquelleAutor der Frage user316054 | 2011-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Lösung ist ein wrapper-script schreiben benannt rabbitmq.sh wie folgt:
Danach ändern supervisord.conf:
InformationsquelleAutor der Antwort Hui Zheng
Dieses Skript startet RabbitMQ als hintergrund-Prozess (mit '&'), die bewirkt, dass eine pid-Datei aktualisiert/erstellt werden (siehe 'warten' unter http://www.rabbitmq.com/man/rabbitmqctl.1.man.html).
Nach Kaninchen hat begonnen worden ist, kann eine Schleife verwendet wird, um zu überprüfen, dass die pid noch läuft. Wenn die Kaninchen Abstürzen oder manuell heruntergefahren (außerhalb von supervisord), dann wird das Skript beendet mit 1 und supervisord übernimmt.
Echo >> ./rmq.txt die Datei gibt es für debugging-Zwecke und kann auskommentiert werden in der Produktion (ich habe dies zu überwachen, startup/shutdown/gestorben-status).
supervisord ist glücklich, weil es sehen können, einen Laufenden Prozess und eine EXIT-löst die stop_rmq Funktion, die Anrufe 'rabbitmqctl stop" für ein sauberes Herunterfahren.
Hier ist die Ausgabe durch das Skript generiert für supervisord:
InformationsquelleAutor der Antwort Michael Dyer
Sie haben Ihre eigene Frage beantwortet. Im Normalbetrieb verwenden Sie niemals töten jeden Prozess, es sei denn, die dokumentiert normale Art und Weise zu verwalten. Im Fall von RabbitMQ der dokumentierte Prozess ist die Verwendung rabbitmqctl stoppen oder zu verwenden rabbitmqserver stoppen.
Gibt es keinen guten Grund verwalten RabbitMQ mit etwas raffinierter als ein shell-Skript, das macht einen Neustart versucht über rabbitmqserver starten. Wenn das nicht sofort funktioniert, dann RabbitMQ ist hart wegen so etwas wie Mangel an Arbeitsspeicher, genügend Speicherplatz zur Verfügung steht, oder ein rogue-system-management-tool gelöscht einige der rabbitmq binären Komponenten.
Im normalen Betrieb RabbitMQ hat einen internen Betreuer, die versuchen werden, Herunterfahren und neu starten, RabbitMQ, so dass, wenn Sie löschen Binärdateien, wird es scheitern, neu zu starten. Bei der Verwendung von tools wie chef, puppet, cfengine, nicht wiederholt push-out Binär-Paket-Dateien. Überprüfen Sie einfach, dass alles da ist wie es sein sollte.
InformationsquelleAutor der Antwort Michael Dillon
Ich würde Ihnen raten, zu verwenden, Monit (http://mmonit.com/), ist es besser geeignet für Dämonen wie RabbitMQ und es ist auch reichhaltig ausgestattet.
Zuerst installieren, müssen Sie die Monit-Paket. Wenn Sie unter Ubuntu/Debian:
Danach, müssen Sie eine Konfigurations-Skript.
Hier ist ein Beispielskript, um Sie ausführen (legen Sie es auf /etc/monit/conf.d/):
Dann, einfach monit neu gestartet, und Sie sind fertig:
InformationsquelleAutor der Antwort Gustavo Rauber