Ich habe einen Arbeitsprozess, der jeweils 1 RabbitMq-Nachricht verarbeitet. Sobald der Worker beendet wird, startet Supervisord ihn neu (wodurch die nächste Nachricht verarbeitet wird).
Ich möchte ein Intervall von X Sekunden festlegen, damit Supervisord nicht sofort neu startet, sondern eine bestimmte Zeit wartet, bevor ein anderer Mitarbeiter gestartet wird.
Ist das möglich? Wie?
quelle
Ich brauchte eine einfache Möglichkeit, einen Befehl in einem Docker-Container auszuführen, in dem es kein Cron gibt. Folgendes verwende ich:
startsecs = 0 stellt sicher, dass der Supervisor der Meinung ist, dass der Befehl erfolgreich gestartet wurde, auch wenn er nach einigen Sekunden beendet wird. Andernfalls wird der Supervisor den Neustart beenden und denken, dass er sich in einer Schleife befindet.
Folgendes würden Sie in /root/date.ts mit dem obigen Beispiel sehen:
Stellen Sie den Schlaf nach Ihren Wünschen ein und ersetzen Sie 'date >> / root / test.ts' durch alles, was Sie brauchen.
Diese Lösung ist auch praktisch, wenn Sie öfter als jede Minute einen Cronjob ausführen müssen.
quelle
und dann
1. Sie müssen den
exec
Befehl verwenden, andernfalls wird ein Unterfortschritt ausgelöst,sleep 60 && exec your command
und Ihr Fortschritt sieht wie folgt ausund wenn Sie dann
supervisorctl
urApp stoppen, stoppen Sie den Fortschritt von 1818 und lassen 3872 einen verwaisten Fortschritt2. empfehlen, die Startsekunden auf 5 mehr als die Schlafsekunden zu ändern. Wenn Sie diese App starten und den Status überprüfen, wird angezeigt, dass sie startet
Andernfalls erhalten Sie beim Starten der App und beim Überprüfen des Status einen laufenden Status, wenn Sie den Wert kleiner als die Schlafsekunden festlegen. Vor der tatsächlichen Ausführung wird jedoch noch cmd angezeigt
3.Wenn Sie Ihre Konfigurationsdatei ändern, müssen Sie cmd neu laden oder einfach Ihren Supervisord neu starten, damit es funktioniert
quelle