在特定时间启动/停止 systemd.service

在特定时间启动/停止 systemd.service

我想在特定时间启动和停止 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=...

您可能不喜欢服务被视为失败的事实,但这或多或少是终止长期运行的服务的合乎逻辑的结果。

为了获得更好的答案,您可能需要解释使用这种不寻常功能的理由。服务通常意味着永远运行或直到它们被明确停止,而不仅仅是固定的时间。

相关内容