我知道这是一个有效的 systemd 单元配置文件语法:
[Unit]
RequiresMountsFor=/mnt/foo /mnt/bar
...
最近,我看到了上述内容的多行变体:
[Unit]
RequiresMountsFor=/mnt/foo
RequiresMountsFor=/mnt/bar
...
这两种语法在语义上是否等效?
我检查了 systemd.unit 手册页中的 RequiresMountsFor 选项,其中明确指出:“采用空格分隔的绝对路径列表。”另外,Requires 和 After 选项也有相似之处。Requires 选项的文档明确指出,单行和多行语法是等效的(对于 Requires 选项):“可以多次指定此选项,或者可以在一个选项中指定多个以空格分隔的单元,在这种情况下将创建所有列出的名称的需求依赖关系。”所以我猜测这同样适用于 RequiresMountsFor。
答案1
看起来确实是等价的:
# tee /run/systemd/system/serverfault-1085820.service >/dev/null << 'EOF'
[Unit]
RequiresMountsFor=/mnt/foo
RequiresMountsFor=/mnt/bar
[Service]
ExecStart=echo hi
EOF
# systemctl daemon-reload
# SYSTEMD_PAGER=cat systemctl show -p RequiresMountsFor serverfault-1085820.service
RequiresMountsFor=/mnt/bar /mnt/foo
这应该在手册页中有更好的记录;它是不是对于所有指令来说都是正确的,正如 systemd.syntax(7) 指出的那样:
允许多次指定各种设置,在这种情况下解释取决于设置。通常,多个设置会形成一个列表,设置为空值会“重置”,这意味着先前的分配将被忽略。当允许这样做时,会在设置的描述中提及。