超时后是否可以终止一次性服务?
假设一个服务是由定时器周期性触发的。该服务通常需要 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