超时后终止 systemd oneshot 服务

超时后终止 systemd oneshot 服务

超时后是否可以终止一次性服务?

假设一个服务是由定时器周期性触发的。该服务通常需要 3 秒才能完成。然而,您的服务也有缺陷,有时它会无限循环运行。修复服务超出了您的范围。因此,您想要的是在超时后终止该服务。

我们可以模拟越野车服务如下:

[Unit]

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'while true; do echo x; sleep 1; done'

[Install]
WantedBy=default.target

阅读手册页我只能找到TimeoutStopSec听起来很有希望的选项。添加

TimeoutStopSec=10s

然而[Service],即使在几分钟后,也根本不会终止该服务。

答案1

手册页systemd.service说:

TimeoutStartSec= 配置等待启动的时间。如果守护程序服务未在配置的时间内发出启动完成信号,则该服务将被视为失败并再次关闭。采用以秒为单位的无单位值,或时间跨度值,例如“5min 20s”。传递“无穷大”以禁用超时逻辑。默认为管理器配置文件中的 DefaultTimeoutStartSec=,除非使用 Type=oneshot,在这种情况下默认禁用超时(请参阅 systemd-system.conf(5))。

我对最后一句感到困惑,这并不意味着您无法重新启用TimeoutStartSec。因此解决方案很简单,只需添加TimeoutStartSec=10s

相关内容