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

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

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

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

2 ответа

Вы можете добиться этого с помощьюStartLimitIntervalSecиStartLimitBurst.

Со страницы руководства модуля systemd:

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

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

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

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

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

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

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

Другие вопросы по тегам