如何定时启动和停止 systemd 服务?

如何定时启动和停止 systemd 服务?

虽然设置systemd在特定时间启动服务相对简单,但如何让它在其他时间停止呢?

我们的想法是只在夜间运行一项服务,并在早上停止它。

答案1

你是对的,计时器的systemd设计方式是开始在特定时间停止服务。因此,要使其停止服务,必须采取一种变通方法。

幸运的是,有几种方法可以实现这一点。

选项 1:使服务 A 与服务 B 发生冲突

第一个选择是创建oneshot与服务 A 冲突的服务 B。这种方法的优点是它完全依赖于systemd单元文件,但缺点是您必须修改服务 A(或创建插入式配置)。

首先需要修改服务 A 的配置,使其与服务 B 冲突:

添加A.service的配置:

[Unit]
Conflicts=B.service
...

然后创建一个不执行任何操作的 B.service:

[Unit]
Description=B service description

[Service]
Type=oneshot
ExecStart=/bin/echo ''

此方法取自此问答

选项 2:让服务 B 停止服务 A

另一个选项是创建一个oneshot服务 B,它只运行停止服务 A 的命令。这种方法的优点是必须修改服务A,但缺点是它依赖于运行systemctl而不是仅仅依赖于systemd单元文件。

对于这种方法,你只需要创建一个B.service,但是这次它会运行一个命令:

[Unit]
Description=B service description

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl stop A.service

对于这两个选项,您随后会为每项服务创建不同的计时器。计时器 A 现在将启动服务 A,而计时器 B 稍后将启动服务 B - 从而有效地停止服务 A。

此问答有关设置systemd服务和计时器的更多信息。

相关内容