我写了一个自己的单位模板:
/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-reload
,start
,{ {1}}和stop
)status
,is-enabled
和enable
都将失败:
disable
奇怪我想,我还没有尝试重新启动我的系统以查看它是否有效......
答案 0 :(得分:2)
您不需要符号链接。只需使用
systemctl start/enable my_service@runner001.service
。然后,systemd将直接使用您的模板。
有关说明符的更多信息,请参阅https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers(即您可以在模板中使用的变量)
如果您需要更多内容,请粘贴模板和预期结果。