我试图限制服务(在容器中)重启的次数。操作系统版本为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
Run Code Online (Sandbox Code Playgroud)
sou*_*edi 37
StartLimitIntervalSec=作为 systemd v230 的一部分添加。在 systemd v229 及以下版本中,您只能使用StartLimitInterval=. 您还需要将StartLimitInterval=和StartLimitBurst=放入该[Service]部分 - 而不是该[Unit]部分。
要在 CentOS 上检查您的 systemd 版本,请运行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'
Run Code Online (Sandbox Code Playgroud)
我想我发现了这个问题。所有在线文档都建议所有参数都在 UNIT 文件(systemd 单元文件)中,但仍然在我的系统(centos 7.5)中,它们在服务文件中。此外名称是“StartLimitInterval”,而不是“StartLimitIntervalSec”。
| 归档时间: |
|
| 查看次数: |
27930 次 |
| 最近记录: |