Systemd - 将 RestartSec 与 StartLimitIntervalSec 配对。这样的配置有什么问题吗?

Systemd - 将 RestartSec 与 StartLimitIntervalSec 配对。这样的配置有什么问题吗?

我为 Debian 11 创建了一个 systemd 服务文件。它用于应始终运行的 python3 脚本。

[Unit]
Description=Printer service
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=user1
WorkingDirectory=/home/user1/myproject
ExecStart=/home/user1/myproject/venv/bin/python3 /home/user1/myproject/myscript.py

[Install]
WantedBy=multi-user.target

我不确定脚本重新启动需要多长时间。我需要增加RestartSec价值吗?我想我不明白这个指令。假设脚本需要 5 秒才能完全激活,会RestartSec=1中断吗?

我还补充说,StartLimitIntervalSec=0因为我没有对 systemd 在一定次数的失败后停止激活服务的速率进行任何限制。如果服务因任何原因失败,systemd 会尝试永远重新启动吗?如果我不指定,会有什么行为User

最后,指令之间是否存在不兼容之处。

答案1

man systemd.service说:

重启秒=

配置重新启动服务之前的睡眠时间(使用 Restart= 配置)。采用以秒为单位的无单位值,或时间跨度值,例如“5min 20s”。默认为 100 毫秒。

这是服务停止或失败的时间量。如果您的脚本需要一些时间才能启动,那也没关系,因为它正处于“激活”阶段。

                     |----RestartSec------|
---------|-----------|--------------------|------------|----------
 running    stopping    stopped             starting     running

man systemd.unit说:

StartLimitIntervalSec=间隔,StartLimitBurst=突发

配置单元启动速率限制。开工数量超过爆裂内的次数间隔时间跨度不允许再开始。使用 StartLimitIntervalSec= 配置检查间隔,使用 StartLimitBurst= 配置每个间隔允许的启动次数。

间隔是一个时间跨度,默认单位为秒,但可以指定其他单位,请参阅 systemd.time(5)。默认为管理器配置文件中的 DefaultStartLimitIntervalSec=,并且可以设置为 0 以禁用任何类型的速率限制爆裂是一个数字,默认为管理器配置文件中的 DefaultStartLimitBurst= 。


所以如果你有这个,就不会有冲突:

Restart=always
RestartSec=1s
StartLimitIntervalSec=3s
StartLimitBurst=2

它将做的是:

  • 当设备停止/故障时,等待1秒,然后重新启动
  • 如果设备在 3 秒内无法启动 2 次,则停止尝试重新启动设备。

如果你只有这个:

Restart=always

然后使用默认值,这意味着:

Restart=always
RestartSec=100ms
StartLimitIntervalSec=10s
StartLimitBurst=5

那么你的行为将会是:

  • 如果设备停止,请等待 100 毫秒,然后再次启动。
  • 如果设备在 10 秒内启动失败 5 次,则停止尝试重新启动设备。

根据您的评论,“您可以禁用任何类型的速率限制”。

Restart=always
StartLimitIntervalSec=0

那么你的行为将会是:

  • 如果设备停止,请等待 100 毫秒,然后再次启动。
  • 无速率限制

相关内容