如何启用单元模板?

时间:2017-10-20 11:40:14

标签: systemd

我写了一个自己的单位模板:

/etc/systemd/user/my_service@.service

这是我想要在启动时提供的一系列服务的基础。我确实想要将每个服务创建为模板的符号链接,如下所示:

$ cd /etc/systemd/user
$ sudo ln -s my_service@.service my_service@runner001.service
$ sudo ln -s my_service@.service my_service@runner002.service
...

但如果我现在尝试启用我得到的服务:

$ sudo systemctl enable my_service@runner001.service
Failed to execute operation: Too many levels of symbolic links

为了解决这个问题,我改为复制文件:

$ cd /etc/systemd/user
$ sudo cp my_service@.service my_service@runner001.service
$ sudo cp my_service@.service my_service@runner002.service
...

现在systemctl enable按预期工作。

但是:制作所有这些副本并在模板更改时让它们保持同步是很尴尬的,这有点违背我认为的模板系统的目的。

我在这里缺少什么?是否可以在不复制模板的情况下启用 runners

我正在使用Ubuntu 16.04和systemd = 229

Btw :如果我在启用该服务后将其替换为符号链接,则它仍适用于某些systemctl命令(daemon-reloadstart,{ {1}}和stopstatusis-enabledenable都将失败:

disable

奇怪我想,我还没有尝试重新启动我的系统以查看它是否有效......

1 个答案:

答案 0 :(得分:2)

您不需要符号链接。只需使用

systemctl start/enable my_service@runner001.service。然后,systemd将直接使用您的模板。

有关说明符的更多信息,请参阅https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers(即您可以在模板中使用的变量)

如果您需要更多内容,请粘贴模板和预期结果。