我试图限制服务(在容器中)重启的数量。操作系统版本为centos-release-7-5,服务文件大致如下(为了阅读方便,去掉了一些参数)。正如其他一些帖子所指出的那样,它应该非常简单(服务器故障重启限制 1 发布,堆栈溢出重启限制 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=
andStartLimitBurst=
放入该[Service]
部分 - 而不是该[Unit]
部分。要在 CentOS 上检查您的 systemd 版本,请运行
rpm -q systemd
.如果您升级到 systemd v230 或更高版本,该
[Service]
部分中的旧名称将继续有效。来源:https ://lists.freedesktop.org/archives/systemd-devel/2017-July/039255.html
你可以在没有看到任何错误的情况下遇到这个问题,因为 systemd 会忽略未知指令。systemd 假定可以忽略许多较新的指令并仍然允许服务运行。
可以手动检查单元文件中的未知指令。至少它似乎适用于最近的 systemd:
我想我找到了问题所在。所有在线文档都表明所有参数都在 UNIT 文件(systemd 单元文件)中,但仍在我的系统中(centos 7.5),它们在服务文件中。除了名称是“StartLimitInterval”,而不是“StartLimitIntervalSec”。