Ich bin mit dieser Funktion nicht vertraut. Wenn es jedoch meine Aufgabe wäre, dieses Problem zu lösen, und ein sehr kurzes Lesen der Manpage keinen einfachen Knopf zum Einstellen dieses Verhaltens bietet, würde ich Folgendes tun:
Erweitern Sie entweder das vorhandene Service-Startskript, oder fügen Sie, wenn dies umständlich ist, ein neues Startskript in die Kette ein (wodurch wiederum das ursprüngliche Startskript gestartet wird). Anstatt den Dienst sofort zu starten, sollte das neue Startskript prüfen, ob der letzte Start kürzlich genug stattgefunden hat. Dies kann durch Überprüfen einer Signalisierungsdatei erfolgen, die beim vorherigen Start erstellt wurde. Wenn die Datei nicht vorhanden ist, kann das Skript die Datei berühren und den Dienst starten. Wenn die Datei vorhanden ist, sollte das Skript prüfen, ob die Datei alt genug ist. Wenn es nicht alt genug ist, sollte es in einer Schleife warten (schlafen), bis die Datei alt genug wird.
So etwas könnte funktionieren (wartet mindestens 1 Minute zwischen den Neustarts):
#!/bin/bash
SIGNALDIR=/tmp
SIGNALFILE=service.started
while /bin/true; do
found=`find "${SIGNALDIR}" -maxdepth 1 -name "${SIGNALFILE}" -mmin -1 | wc -l`
[ "${found}" -eq 0 ] && break
echo "Waiting"
sleep 10
done
touch "${SIGNALDIR}/${SIGNALFILE}"
original service start...
Sie sollten Ihre Neustarts in der
./finish
Datei für diesen Dienst, der bei abnormaler Beendigung ausgeführt wird, auf die Geschwindigkeit beschränken . Das./finish
Skript erhält den Rückkehrcode von dort./run
und von dort aus können Sie festlegen, was zu tun ist usw. In diesem Fall sollte Ihr./finish
Skript laut über die Fehler schreien und Benachrichtigungen senden und in Flammen herumspringen ...quelle
Ich bin wirklich kein Fan von Init-basiertem Prozessmanagement (und Runit ist im Grunde ein Init-Ersatz). Wie Sie feststellen, ist ein einfacher Neustart fehlgeschlagener Prozesse, sobald sie absterben, keine besonders gute Strategie. Ich habe init verwendet, um monit neu zu starten, aber das ist soweit es geht. (Möglicherweise könnte OOM-Killer Monit töten).
Daher möchte ich Sie ermutigen, nach einem Ersatz zu suchen, anstatt die Dinge zu reparieren.
Monit ist ziemlich alt, aber es macht den Job gut, und mir ist nichts Besseres bekannt. Es hat die nette Eigenschaft, dass nach dem Start nicht mehr Speicher benötigt werden muss, sodass alles, was in einer Skriptsprache geschrieben ist, die Hölle los ist. Das Letzte, was Sie wollen, ist, dass Ihr Prozessmonitor stirbt, weil er keinen Speicher erhält.
quelle