Ограничить частоту ручного перезапуска службы systemd

Ограничить частоту ручного перезапуска службы systemd

У меня есть система, в которой служба (например, nginx) иногда чрезмерно перезапускается командой «systemd restart nginx» (в результате работы других скриптов, например, для применения новой конфигурации или ротации журналов).

Даже при "ручном" перезапуске сервиса таким образом systemd падает с ограничением частоты перезапуска. Также, конечно, не имеет смысла перезапускать nginx 10 раз в определенную секунду.

Так как же ограничить частоту ручного перезапуска служб? Есть ли что-то вроде restart-cooldown, которое также применялось бы к запросам на ручной перезапуск? Похоже, что обычные настройки применяются к автоматическому перезапуску systemd.

решение1

Этого можно добиться с помощью StartLimitIntervalSecи StartLimitBurst.

Из страницы руководства по модулю systemd:

StartLimitIntervalSec=интервал, StartLimitBurst=всплеск

Настройте ограничение скорости запуска блока. Блоки, которые запускаются чаще, чем время всплеска в пределах интервала времени, больше не могут запускаться. Используйте StartLimitIntervalSec= для настройки интервала проверки и StartLimitBurst= для настройки разрешенного количества запусков за интервал.

interval — это промежуток времени, единицей измерения по умолчанию являются секунды, но можно указать и другие единицы, см. systemd.time(5). Значение по умолчанию — DefaultStartLimitIntervalSec= в файле конфигурации менеджера, и может быть установлено равным 0, чтобы отключить любые ограничения скорости. burst — это число, значение по умолчанию — DefaultStartLimitBurst= в файле конфигурации менеджера.

Эти параметры конфигурации особенно полезны в сочетании с настройкой службы Restart= (см. systemd.service(5)); однако они применяются ко всем видам запусков (включая ручной), а не только к тем, которые инициируются логикой Restart=.

Обратите внимание, что блоки, настроенные для Restart= и достигшие начального предела, больше не будут перезапущены; однако их все равно можно перезапустить вручную или с таймера или сокета позже, после того, как интервал пройдет. С этого момента логика перезапуска активируется снова. systemctl reset-failed приведет к очистке счетчика частоты перезапуска для службы, что полезно, если администратор хочет вручную запустить блок, а начальный предел мешает этому. Ограничение частоты применяется после выполнения любых проверок состояния блока, и, следовательно, активации блоков с невыполненными условиями не учитываются в пределе частоты.

решение2

Какую версию операционной системы вы используете? Пакет nginx был установлен с помощью репозитория дистрибутива Linux или из исходного кода?

Возможно, ответы на эти вопросы помогут определить возможный путь решения проблемы.

Связанный контент