虽然设置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
服务和计时器的更多信息。