我为 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
重启秒=
配置重新启动服务之前的睡眠时间(使用 Restart= 配置)。采用以秒为单位的无单位值,或时间跨度值,例如“5min 20s”。默认为 100 毫秒。
这是服务停止或失败的时间量。如果您的脚本需要一些时间才能启动,那也没关系,因为它正处于“激活”阶段。
|----RestartSec------|
---------|-----------|--------------------|------------|----------
running stopping stopped starting running
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 毫秒,然后再次启动。
- 无速率限制