StartLimitIntervalSec и StartLimitBurst в Systemd никогда не работают

Я пытался ограничить количество перезапуска службы (в контейнере). Версия ОС – centos-release-7-5, служебный файл примерно такой же, как показано ниже (некоторые параметры удалены для удобства чтения). Это должно быть довольно просто, как отмечали некоторые другие публикации (ограничение перезапуска после сбоя сервера, ограничение перезапуска после переполнения стека 2). Все же StartLimitBurst и StartLimitIntervalSec никогда не работают для меня.

Я проверил несколько способов: (1) Я проверяю PID службы, убиваю службу с помощью команды «kill -9 ****» несколько раз. Сервис всегда перезапускается после 20 лет! (2) Я также попытался испортить служебный файл, чтобы контейнер никогда не работал. Тем не менее, это не работает, сервисный файл просто продолжает перезапускаться.

Любая идея?

[Unit] Description=Hello Fluentd After=docker.service Requires=docker.service StartLimitBurst=2 StartLimitIntervalSec=150s [Service] EnvironmentFile=/etc/environment ExecStartPre=-/usr/bin/docker stop "fluentd" ExecStartPre=-/usr/bin/docker rm -f "fluentd" ExecStart=/usr/bin/docker run fluentd ExecStop=/usr/bin/docker stop "fluentd" Restart=always RestartSec=20s SuccessExitStatus=143 [Install] WantedBy=multi-user.target 

StartLimitIntervalSec= был добавлен как часть systemd v230. В systemd v229 и ниже вы можете использовать только StartLimitInterval= . Вам также нужно будет поместить StartLimitInterval= и StartLimitBurst= в раздел [Service] не в раздел [Unit] .

Чтобы проверить вашу версию systemd в CentOS, запустите rpm -q systemd .

Если вы когда-нибудь обновитесь до systemd v230 или выше, старые имена в разделе [Service] будут работать.

Источник: https://lists.freedesktop.org/archives/systemd-devel/2017-July/039255.html

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

Можно вручную проверить файл модуля на наличие неизвестных директив. По крайней мере, похоже, что работает на недавнем systemd:

 $ systemd-analyze verify foo.service /etc/systemd/system/foo.service:9: Unknown lvalue 'FancyNewOption' in section 'Service' 

Я думаю, что нашел проблему. Все документы в Интернете указывают на то, что все параметры находятся в файле UNIT (файл модуля systemd ), но все же в моей системе (centos 7.5) они находятся в служебном файле. Кроме того, имя «StartLimitInterval», а не «StartLimitIntervalSec».