Systemd 允许您创建模板单元,如systemd.unit中所述。
您可以在模板单元中使用许多变量。
我感兴趣"%j"
:
这是最后一个“-”和前缀名称末尾之间的字符串。
还定义了“前缀名称”:
对于实例化的单元,这指的是单元名称的第一个“@”字符之前的字符串。
我很清楚它们是什么,但不清楚它们为什么存在。
我猜他们可能正在运行同一服务的多个版本。什么是如何使用它的真实示例?
Systemd 允许您创建模板单元,如systemd.unit中所述。
您可以在模板单元中使用许多变量。
我感兴趣"%j"
:
这是最后一个“-”和前缀名称末尾之间的字符串。
还定义了“前缀名称”:
对于实例化的单元,这指的是单元名称的第一个“@”字符之前的字符串。
我很清楚它们是什么,但不清楚它们为什么存在。
我猜他们可能正在运行同一服务的多个版本。什么是如何使用它的真实示例?
单元可以在
.d/
单元旁边的目录中进行附加设置。例如,foo.service
可以通过foo.service.d/*.conf
.模板单元将使用两个目录——实例和模板,因此
[email protected]
将从 和[email protected]/*.conf
扩展[email protected]/*.conf
。这样,您可以一次扩展该单元的所有实例。在这两种情况下,您的单元及其扩展配置都可以使用 %i 来获取“ttyS1”位。但是,某些单元不能使用模板,例如切片(代表 cgroup)被命名
user-<UID>.slice
,而不是user@<UID>.slice
因为这些单元的名称代表文件系统路径(破折号映射到斜杠,因此“user-123.slice”是“用户切片”)。因为希望能够配置所有单独的用户切片(例如,给每个切片 x% 的内存),所以为使用类似路径名称的单元添加了类似的机制:类似于上面的 getty 示例,
user-1000.slice
可以扩展单元来自user-1000.slice.d/
anduser-.slice.d/
,后一个通用目录中的文件能够使用 %j 来获取“1000”位。最后一个示例在实践中被默认的 systemd 安装使用:
其中一个示例可能是在名称中引用路径的系统单位。在这样的单位中,
/
被替换为-
(并且前导-
被删除)。例如,一个挂载单元/home/muru
将被命名为home-muru.mount
. 同样,我可以在运行时看到其他基于路径的单元名称systemctl list-units
:在其中许多中,路径的最后一个组成部分,即由 给出的部分
%j
,可能在单元中很有用。我不知道其中是否有任何实际使用该名称,但它可能很方便,例如,用于%j
获取目录 in/home
或 in/run/user
或类似目录的挂载单元生成器的用户名。