在 systemd 中使用路径激活和目标订购服务

在 systemd 中使用路径激活和目标订购服务

我有一堆服务(比如S1, S2,... S10),它们只能在关键服务 C1 初始化后启动。 C1 写入一个文件(例如/var/run/critical.init),表明它已完成初始化。此时,每个服务都S1..S10应该由 systemd 启动。

在尝试实现上述内容时,我使用了.path基于 systemd 的激活并创建了两个文件:一个用于 的S1.path 文件:

$ cat s1.path
[Path]
PathExists=/var/run/critical.init
Unit=s1.service

[Install]
WantedBy=multi-user.target


$ systemctl enable s1.path

以及描述服务本身的文件:

$ cat s1.service
[Unit]
Description=Some service
After=syslog.target

[Service]
ExecStart=/usr/bin/s1
Type=simple
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

重新启动后,我验证systemctl status s1显示该设备处于活动状态并且S1并且不是列在输出中ps -ef(如预期)。在我/var/run/critical.init手动创建文件后不久,systemd 就会启动该单元s1

上述实验向我证实,基于路径的激活适用于一个单元。我现在想将其扩展到所有服务S1...S10

最明显的方法是为每个服务编写一个.path文件,但我正在寻找一种更优雅的解决方案。

使用 systemd 可以解决这个问题吗target?如果每个服务S1...S10都是 new 的一部分critical.target而不是 的一部分multi-user.target,我可以将 的依赖关系设置为/var/log/critical.init在 中的任何单元critical.target被触发之前就存在吗?也欢迎任何其他建议。

相关内容