我在启动运行嵌入式 Linux 的设备时遇到问题。我的 systemd 服务在安装某些分区之前运行,这是不可接受的。
我列出了我的安装systemctl list-units --type=mount
并查看 .mount 文件。
在我的 systemd 服务文件中,我现在进行了修改以等待安装它们。例如,我的坐骑是opt-abc.mount
和,我同时使用和等待它们被安装。opt-def.mount
After
Requires
然而,对于实现这一目标的最佳方法,存在很多不同的意见。RequiresMountsFor=
,由于非自动安装,有些人建议不要使用此选项。
任何有关这方面的帮助/经验将不胜感激。
我的服务文件的 Unit 部分现在如下所示:
[Unit]
Description=My service
After=opt-abc.mount
After=opt-def.mount
Requires=opt-abc.mount
Requires=opt-def.mount
答案1
首先,After= 和 Requires= 都可以获得空格分隔的单元列表。因此,您不需要多项作业(更多,我认为这可能会产生意想不到的结果)。
接下来,After=和Requires=的区别。看看这个https://www.freedesktop.org/software/systemd/man/systemd.unit.html手动的。简而言之: Requires= 用于构建依赖项。 After= 为执行顺序。
我相信,你只需要 After= 。请记住,挂载目标可能是由 fstab 或其他东西生成的。看来,在 Requires= 中使用生成的单元是不好的做法。