我想在特定时间启动和停止 systemd.service 。想必我会使用 .timer 单元来开始这项工作,但是有没有内置的方法停止在特定持续时间或特定时间之后的工作,或者我是否必须创建第二个 .timer 单元来执行stop
?
谢谢
答案1
要使用计时器停止服务 A,您可以创建oneshot
其所属类型的服务 B冲突,然后使用定时器来启动服务B.
如果一个单元在另一个单元上有 Conflicts= 设置,则启动前者将停止后者,反之亦然。 (来源)
A、服务:
[Unit]
Conflicts=B.service
...
B、服务:
[Unit]
Description=B service description
[Service]
Type=oneshot
ExecStart=/bin/echo ''
B、定时器:
[Timer]
AccuracySec=1
OnActiveSec=10
[Install]
WantedBy=timers.target
以下将在 10 秒后停止服务 A。
systemctl start A.service
systemctl start B.timer
答案2
您可以使用几个 cron 作业:
# ┌────────────分钟(0 - 59) # │ ┌────────────小时 (0 - 23) # │ │ ┌──────────────一个月中的某一天 (1 - 31) # │ │ │ ┌──────────────月 (1 - 12) # │ │ │ │ ┌──────────────── 星期几 (0 - 6) # │ │ │ │ │ # │ │ │ │ │ * * * * * systemctl start $SERVICE.service * * * * * systemctl stop $SERVICE.service
有关 cron 的更多信息:https://en.wikipedia.org/wiki/Cron,https://wiki.archlinux.org/index.php/Cron
答案3
确实有另一种方法可以在文件中配置特定的运行时后停止服务.service
。
RuntimeMaxSec=...
您可能不喜欢服务被视为失败的事实,但这或多或少是终止长期运行的服务的合乎逻辑的结果。
为了获得更好的答案,您可能需要解释使用这种不寻常功能的理由。服务通常意味着永远运行或直到它们被明确停止,而不仅仅是固定的时间。