Вопрос или проблема
Я хотел бы ограничить количество раз, когда мой сервис может перезапускаться вообще. Есть ограничения на всплески
StartLimitIntervalSec=60
StartLimitBurst=5
Но они ограничивают количество раз, когда сервис может перезапускаться в заданный интервал.
Есть ли способ указать, сколько раз сервис может перезапуститься в общем? Как будто интервал был установлен на бесконечность.
systemd 245 (245.4-4ubuntu3.2)
Частичное решение. Я фактически установил эти значения
StartLimitIntervalSec=1d
StartLimitBurst=5
Что ограничивает 5 перезапусков в день.
Вы можете указать
StartLimitIntervalSec=infinity
но, пожалуйста, прочитайте документацию о том, когда счетчик перезапусков сбрасывается.
Кроме того, сообщается, что перезагрузка системы и systemctl daemon-reload
также сбрасывают счетчик.
Ответ или решение
Вопрос о том, как ограничить количество перезапусков службы в systemd, является достаточно важным для системных администраторов, стремящихся обеспечить стабильность и безопасность своих систем. Рассмотрим теоретическую часть, предложим пример и объясним, как можно применить полученные знания на практике.
Теория
В systemd имеются параметры StartLimitIntervalSec
и StartLimitBurst
, которые задают ограничение на количество перезапусков службы в определенный интервал времени. Оба параметра работают в связке:
- StartLimitIntervalSec определяет продолжительность временного окна, в течение которого учитываются перезапуски.
- StartLimitBurst указывает максимальное количество перезапусков, разрешенное в этом временном окне.
По умолчанию, при превышении указанных лимитов служба временно блокируется для дальнейшего перезапуска.
Однако применение постоянного ограничения на количество перезапусков, которое бы не сбрасывалось при выполнении действий, таких как перезагрузка системы или выполнение systemctl daemon-reload
, не предусмотрено в systemd.
Пример
Вы устанавливаете следующие значения в конфигурации:
[Unit]
StartLimitIntervalSec=1d
StartLimitBurst=5
В данном примере вы ограничиваете службу пятью возможными перезапусками в течение одного дня. Эта конфигурация является компромиссным решением, позволяющим контролировать частоту перезапусков без существенной нагрузки на систему.
Применение
Итак, хотя systemd не предлагает параметра для ограничения количества перезапусков за весь срок службы сервиса напрямую, вы можете использовать настройки интервала и всплеска для контроля подобных ситуаций. Учитывая сообщения о сбросе счетчика при перезагрузке системы или обновлении демона, рекомендуется реализовать внешний контроль с помощью дополнительного скрипта или мониторинга.
Если же возможность разрядки счетчика после systemctl daemon-reload
или перезагрузки критична, это может потребовать внесения изменений на уровне кода службы или перехода на альтернативные системы менеджмента процессов, способные отслеживать и ограничивать события перезапуска более детально.
Таким образом, основной задачей является постоянный мониторинг состояния вашей службы, регулярное тестирование и оценка поведения системы в различных ситуациях. Это обеспечит необходимую устойчивость и надежность работы вашей инфраструктуры.