我试图限制服务(在容器中)重新启动的次数。操作系统版本为CentOs 7.5
,服务文件大致如下(为了阅读方便,删除了一些参数)。正如其他一些帖子指出的那样,它应该非常简单(服务器故障重启限制 1 的帖子,堆栈溢出重启限制 2 的帖子)。但StartLimitBurst
从来StartLimitIntervalSec
没有为我工作过。
我测试了几种方法:
- 我检查了服务PID,
kill -9 ****
多次杀死该服务。该服务总是在之后重新启动20多岁! - 我还尝试弄乱服务文件,使容器永远不会运行。尽管如此,它还是不起作用,服务文件只是不断重新启动。
任何想法?
[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
答案1
StartLimitIntervalSec=
作为 systemd v230 的一部分添加。在 systemd v229 及更低版本中,您只能使用StartLimitInterval=
.您还需要将StartLimitInterval=
和StartLimitBurst=
放入该[Service]
部分 - 而不是该[Unit]
部分。
要检查 CentOS 上的 systemd 版本,请运行rpm -q systemd
.
如果您升级到 systemd v230 或更高版本,该部分中的旧名称[Service]
将继续有效。
参考:
您可能会遇到此问题而根本看不到任何错误,因为 systemd 会忽略未知指令。 systemd 假设许多较新的指令可以被忽略并且仍然允许服务运行。
可以手动检查单元文件中是否存在未知指令。至少它似乎可以在最近的 systemd 上运行:
$ systemd-analyze verify foo.service
/etc/systemd/system/foo.service:9: Unknown lvalue 'FancyNewOption' in section 'Service'
答案2
我想我发现了问题。所有在线文档都建议所有参数都在 UNIT 文件中(系统单元文件),但仍然在我的系统(centos 7.5)中,它们位于服务文件中。此外,名称是“StartLimitInterval”,而不是“StartLimitIntervalSec”。