Я хочу, чтобы Upstart сделал две вещи:
- прекратите пытаться возродить неудачный процесс так быстро
- никогда не сдавайся, пытаясь возродиться
В идеальном мире выскочка будет пытаться перезапустить мертвый процесс через 1 с, а затем удваивать эту задержку при каждой попытке, пока она не достигнет часа.
Возможно ли что-то подобное?
never give up trying to respawn
остается без ответа. кто угодно?Ответы:
Upstart Cookbook рекомендует задержку после остановки ( http://upstart.ubuntu.com/cookbook/#delay-respawn-of-a-job ). Используйте
respawn
строфу без аргументов, и она будет продолжаться вечно:(Я получил это из этого вопроса Ask Ubuntu )
Чтобы добавить экспоненциальную задержку, я бы попробовал поработать с переменной окружения в скрипте post-stop, я думаю, что-то вроде:
** РЕДАКТИРОВАТЬ **
Чтобы применить задержку только при повторном порождении, избегая задержки при реальном останове, используйте следующее, которое проверяет, является ли текущая цель «остановкой» или нет:
источник
post-start
бы сбросить его до 1.Как уже упоминалось, используйте
respawn
для запуска респауна.Тем не менее, в разделе « Поваренная книга Upstart»
respawn-limit
говорится, что вам нужно указать,respawn limit unlimited
чтобы поведение было повторным.По умолчанию он будет повторяться до тех пор, пока процесс не возродится более 10 раз за 5 секунд.
Поэтому я бы предложил:
источник
Я закончил тем, что положил
start
в cronjob. Если служба работает, это не имеет никакого эффекта. Если он не запущен, он запускает службу.источник
Я улучшил ответ Роджера. Как правило, вы хотите выполнить откат, если в базовом программном обеспечении возникла проблема, из-за которой оно часто зависало за короткий промежуток времени, но после восстановления системы вы хотите сбросить время отката. В версии Roger служба будет работать в течение 60 секунд всегда, даже для одиночных и изолированных аварий после 7 аварий.
источник
Вы хотите
respawn limit <times> <period>
- хотя это не обеспечит экспоненциальное поведение, которое вы ищете, это, вероятно, подойдет для большинства случаев использования. Вы можете попытаться использовать очень большие значения дляtimes
иperiod
приблизить то, что вы пытаетесь достичь. Смотрите раздел man 5 initrespawn limit
для справки.источник
respawn limit 10 3600
10 попыток, они, скорее всего, были бы использованы немедленно - поскольку по умолчанию задержка отсутствует.Другие ответили на вопрос по строкам пределов респауна и предела респауна, но я бы хотел добавить собственное решение для скрипта post-stop, который контролирует задержку между перезапусками.
Самая большая проблема с решением, предложенным Роджером Дьюком, заключается в том, что задержка приводит к зависанию «restart jobName» до завершения сна.
Мое дополнение проверяет, выполняется ли перезапуск, прежде чем определить, стоит ли спать.
источник