%i
当引用其他模板化服务时,我们是否需要在模板中使用实例名称说明符 ( ),或者我们可以假设实例名称是推断出来的吗?
许多例子遵循这种模式(例如Requires=bottom@%i.service
),但这%i
似乎没有必要,而且没有它一切似乎都可以正常工作。
> cd ~/.config/systemd/user
> cat [email protected]
[Unit]
# Wants=middle@%i.service
[email protected]
> cat [email protected]
[Unit]
# Requires=bottom@%i.service
[email protected]
[Service]
ExecStart=/usr/bin/sh -c "echo middle"
> cat [email protected]
[Service]
ExecStart=/usr/bin/sh -c "echo bottom"
> systemctl --user start [email protected]
> journalctl --user -f
Nov 17 22:21:02 miles-desk systemd[3064]: Starting [email protected]...
Nov 17 22:21:02 miles-desk sh[4010694]: bottom
Nov 17 22:21:02 miles-desk systemd[3064]: Starting [email protected]...
Nov 17 22:21:02 miles-desk systemd[3064]: Finished [email protected].
Nov 17 22:21:02 miles-desk sh[4010695]: middle
Nov 17 22:21:02 miles-desk systemd[3064]: Finished [email protected].
%i
在模板中省略说明符是否安全?如果是这样,那么我很困惑为什么我无法找到任何带有此简写的示例。有什么需要注意的问题吗?我在中没有找到任何关于此的使用说明文档。
答案1
Requires
等人。直接处理模板:
如果源单元是模板,则目标也可以是模板,在这种情况下,实例将被“传播”到目标单元以形成有效的单元实例。
反之对于RequiredBy
和家人:
模板单元还可以列出模板单元,在这种情况下,将添加通用依赖性,其中列出单元的每个实例将具有对具有相同实例值的所列出模板的实例的依赖性。
因此,对于这种用途,是的,省略 是安全的%i
。