Однако я не знаком с этим средством, если бы моей задачей было решить эту проблему, а очень короткое чтение справочной страницы не предлагало простой ручки для настройки этого поведения, я бы сделал следующее:
Либо расширьте существующий сценарий запуска службы, либо, если это громоздко, вставьте в цепочку новый сценарий запуска (который, в свою очередь, запускает исходный сценарий запуска). Вместо того, чтобы запускать сервис сразу, новый стартовый скрипт должен проверить, произошел ли последний запуск достаточно недавно. Это можно сделать, проверив файл сигнализации, созданный при предыдущем запуске. Если файл не существует, сценарий может продолжить и коснуться файла и запустить службу. Если файл существует, скрипт должен проверить, является ли файл достаточно старым. Если он недостаточно стар, он должен ждать (спит) в цикле, пока файл не станет достаточно старым.
Примерно так может работать (ждет не менее 1 минуты между перезапусками):
#!/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...
Вы должны ограничить скорость перезапусков в
./finish
файле для этой службы, которая запускается после аварийного завершения../finish
Скрипт получит код возврата./run
и оттуда вы можете определить , что делать, и т.д. Для этого вопроса, вы должны иметь свой./finish
сценарий громко кричать о неудачах и отправке уведомлений и прыгать все вокруг в огне ...источник
Я на самом деле не фанат управления процессами на основе инициализации (а runit в основном является заменой инициализации). Как вы обнаруживаете, простой перезапуск неудачных процессов, как только они умирают, не является особенно хорошей стратегией. Я использовал init для перезапуска monit, но это все, что нужно. (потенциально OOM киллер мог убить Монит).
Итак, я бы посоветовал вам искать замену, а не исправлять вещи.
Монит довольно старый, но он хорошо справляется со своей работой, и я не знаю ничего лучшего, что произошло. У него есть приятная особенность - нет необходимости распределять больше памяти после запуска, так что, черт возьми, ничего не написано на языке сценариев. Последнее, что вы хотите, - это то, что ваш монитор процесса умирает, потому что он не может получить память.
источник