我仍然无法理解 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”时,它运行正常。