如何让 systemd 等待启动一个单元,直到满足某个条件

如何让 systemd 等待启动一个单元,直到满足某个条件

我仍然无法理解 systemd 单元文件中的启动顺序依赖项配置。我已阅读手册 ( systemd.unit)。

我尝试使用After=Requires=行将依赖项添加到我的单元配置文件中。但是它在系统启动期间仍然经常失败,因为 systemd 在所需资源(在我的情况下是 LUKS 加密卷)可用之前过早启动它。在我的测试中,看起来 systemd 忽略了这些配置行。这些行的内容也是不是使用命令时列出:

systemctl list-dependencies

检查已配置的依赖项。 例子:我的设备卷是/dev/dm-6。我如何指定 systemd 应等待直到此设备最终出现后才启动我的设备?

如果我在启动后使用以下命令在终端窗口中手动启动我的设备:

systemctl start 我的单位名称

它工作正常。

答案1

systemd.device可能是你想要的

名称以“.device”结尾的单元配置文件对 sysfs/udev(7) 设备树中公开的设备单元信息进行编码。这可用于定义设备与其他单元之间的依赖关系。... 设备单元以其控制的 /sys/ 和 /dev/ 路径命名。示例:设备 /dev/sda5 在 systemd 中公开为 dev-sda5.device

链接

答案2

RequiresMountsFor=/mnt/volume

该路径位于所需的挂载点。

答案3

也许你应该检查ExecStartPre=一下ExecCondition=。看起来他们能够解决你的问题。

答案4

我也遇到了类似的问题,在 /dev/mapper 下的 Luks 设备创建之前,服务就已经启动了。

当我执行“systemctl start myservice”时,它运行正常。

相关内容