单元模板和非模板目标单元

单元模板和非模板目标单元

我喜欢将自定义单元文件保存在自己的目录中,远离 /etc。在 247 中,使用如下内容效果很好:

systemctl enable /path/to/unit.service

这也适用于模板,甚至那些具有关联计时器的模板:

systemctl enable /path/to/timed-unit@.*

之后您将实例化:

systemctl enable [email protected]

然而,在 252 中,当尝试使用路径名启用文件时,我现在收到以下错误:

Failed to enable unit: Destination unit timers.target is a non-template unit.

或者:

Failed to enable unit: Destination unit multi-user.target is a non-template unit.

文档[1]表明,如果模板列出了一个服务(在本例中通过WantedBys),那么它需要DefaultInstance在启用时提供一个 或 实例。这是有道理的,所以要么行为被收紧,要么在 252 中修复了一个错误。

但是,向路径提供实例会导致文件未找到错误(正如预期的那样)。我可能可以自己创建符号链接,但是有什么方法可以让 systemd 在文件系统上注册一个单元文件以便稍后在实例中启用吗?

[1]https://www.freedesktop.org/software/systemd/man/systemd.unit.html#%5BInstall%5D%20Section%20Options

答案1

事实证明,文件系统上的模板化单元注册,但错误消息/输出已更改并且未确认。

因此,在启用实例后,其工作方式与之前一样。

答案2

AFAIK,您不应该能够启用模板单元,只有实例单元应该能够启用。因为模板本身并不是一个可以自行启动的真实单元。

您可以不启用模板单元(我认为您这样做只是为了让 systemd 可以通过在 中创建符号链接来找到真正的文件)/etc,而是尝试systemctl link专门用于此目的的命令...

相关内容