systemd 单元文件中的选项RequiresMountsFor=
要求在单元启动之前挂载指定的路径。
据我所知,参数可以是挂载点以及该挂载点下的任何目录。例如,如果 BIND 的区域文件位于/etc/bind
其/etc
自己的文件系统中,则RequiresMountsFor=/etc
或都将实现所需的结果:BIND 只有在挂载并可用RequiresMountsFor=/etc/bind
时才会启动。/etc
/etc/bind
现在我想知道如果RequiresMountsFor=
指定一个不存在的路径会发生什么。例如,如果fstab
中有/
和的条目,/etc
但 下方没有任何内容/etc
, 和RequiresMountsFor=/etc/this/path/does/not/exist
引用 中不存在的路径/etc
。
这是否会导致设备等待/etc
挂载(因为它是路径中的最后一个挂载点)?如果是这样,设备最终会在/etc
挂载后启动吗?还是会因为/etc/this/path/does/not/exist
找不到而失败?
这可能与单元接受参数有关,例如[email protected]
,它具有RequiresMountsFor=/etc/postgresql/%I /var/lib/postgresql/%I
。如果一个集群的数据文件被移走,则在该集群上调用该单元时,第二条路径将指向任何地方。
RequiresMountsFor=
Requires=
是相应 .mount 单元的直接翻译,systemd 将检查每个可能的前缀(/
、、、...)是否存在相应单元,并将其添加到 Requires 依赖项中;与 .mount 单元不对应的前缀将被跳过/etc
。/etc/postgresql
.mount
除此之外没有其他检查,特别是没有转换为单位条件。如果您需要检查路径是否存在,请使用
ConditionPathExists=
或AssertPathExists=
。