Ich möchte, dass Upstart zwei Dinge tut:
- Hören Sie auf, so schnell zu versuchen, einen fehlgeschlagenen Prozess erneut zu starten
- Gib niemals auf, zu versuchen, wieder zu erscheinen
In einer idealen Welt würde Upstart versuchen, einen toten Prozess nach einer Sekunde neu zu starten und diese Verzögerung bei jedem Versuch zu verdoppeln, bis eine Stunde erreicht ist.
Ist so etwas möglich?
never give up trying to respawn
bleibt unbeantwortet. jemand?Antworten:
Das Upstart-Kochbuch empfiehlt eine Verzögerung nach dem Stopp ( http://upstart.ubuntu.com/cookbook/#delay-respawn-of-a-job ). Verwenden Sie die
respawn
Zeilengruppe ohne Argumente und versuchen Sie es für immer:(Ich habe dies von dieser Frage an Ubuntu bekommen. )
Um den exponentiellen Verzögerungsteil hinzuzufügen, würde ich versuchen, mit einer Umgebungsvariablen im Post-Stop-Skript zu arbeiten.
** EDIT **
Um die Verzögerung nur beim erneuten Auftauchen anzuwenden und die Verzögerung bei einem echten Stopp zu vermeiden, verwenden Sie Folgendes, um zu überprüfen, ob das aktuelle Ziel "Stopp" ist oder nicht:
quelle
post-start
, es auf 1 zurückzusetzen.Verwenden Sie
respawn
, wie bereits erwähnt, um den Respawn auszulösen.In der Beschreibung
respawn-limit
des Upstart-Kochbuchs wird jedoch angegeben , dass Sie angeben müssen, umrespawn limit unlimited
ein kontinuierliches Wiederholungsverhalten zu erzielen.Standardmäßig wird der Vorgang wiederholt, solange der Vorgang nicht mehr als 10 Mal in 5 Sekunden erneut ausgeführt wird.
Ich würde daher vorschlagen:
quelle
start
Am Ende habe ich einen Cronjob gemacht. Wenn der Dienst ausgeführt wird, hat er keine Auswirkungen. Wenn es nicht ausgeführt wird, wird der Dienst gestartet.quelle
Ich habe eine Verbesserung an der Antwort von Roger vorgenommen. In der Regel möchten Sie einen Backoff ausführen, wenn ein Problem in der zugrunde liegenden Software auftritt, das in kurzer Zeit zu einem häufigen Absturz führt. Nach Wiederherstellung des Systems möchten Sie jedoch den Backoff zurücksetzen. In der Roger-Version wird der Dienst immer 60 Sekunden lang inaktiv sein, auch bei einzelnen und isolierten Abstürzen nach 7 Abstürzen.
quelle
Sie möchten
respawn limit <times> <period>
- obwohl dies nicht das exponentielle Verhalten liefern würde, das Sie suchen, würde es wahrscheinlich für die meisten Anwendungsfälle reichen. Sie können versuchen, sehr große Werte für das zu erreichen, was Sie erreichen möchten,times
undperiod
diese näherungsweise zu bestimmen. Weitere Informationen finden Sie im Abschnitt zu man 5 initrespawn limit
.quelle
respawn limit 10 3600
die 10 Versuche verwendet hätten, diese wahrscheinlich sofort aufgebraucht wären - da es standardmäßig keine Verzögerung gibt.Andere haben die Frage nach den Zeilengruppen "Respawn" und "Respawn-Limit" beantwortet, aber ich möchte meine eigene Lösung für das Post-Stop-Skript hinzufügen, das die Verzögerung zwischen dem Neustart steuert.
Das größte Problem bei der von Roger Dueck vorgeschlagenen Lösung besteht darin, dass 'restart jobName' aufgrund der Verzögerung hängen bleibt, bis der Ruhezustand abgeschlossen ist.
Mein Zusatz überprüft, ob ein Neustart durchgeführt wird, bevor festgestellt wird, ob der Schlafmodus aktiviert ist oder nicht.
quelle