systemd - 如何启用单元模板?

标签 systemd

我编写了自己的单元模板:

/etc/systemd/user/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e5889cba968097938c8680a5cb968097938c8680" rel="noreferrer noopener nofollow">[email protected]</a>

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

$ cd /etc/systemd/user
$ sudo ln -s <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e78a9eb8948295918e8482a7c9948295918e8482" rel="noreferrer noopener nofollow">[email protected]</a> <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="55382c0a263027233c36301527203b3b30276565647b263027233c3630" rel="noreferrer noopener nofollow">[email protected]</a>
$ sudo ln -s <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a0cdd9ffd3c5d2d6c9c3c5e08ed3c5d2d6c9c3c5" rel="noreferrer noopener nofollow">[email protected]</a> <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0e6377517d6b7c78676d6b4e7c7b60606b7c3e3e3c207d6b7c78676d6b" rel="noreferrer noopener nofollow">[email protected]</a>
...

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

$ sudo systemctl enable <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4f2236103c2a3d39262c2a0f3d3a21212a3d7f7f7e613c2a3d39262c2a" rel="noreferrer noopener nofollow">[email protected]</a>
Failed to execute operation: Too many levels of symbolic links

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

$ cd /etc/systemd/user
$ sudo cp <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="91fce8cee2f4e3e7f8f2f4d1bfe2f4e3e7f8f2f4" rel="noreferrer noopener nofollow">[email protected]</a> <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4c2135133f293e3a252f290c3e392222293e7c7c7d623f293e3a252f29" rel="noreferrer noopener nofollow">[email protected]</a>
$ sudo cp <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d2bfab8da1b7a0a4bbb1b792fca1b7a0a4bbb1b7" rel="noreferrer noopener nofollow">[email protected]</a> <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bad7c3e5c9dfc8ccd3d9dffac8cfd4d4dfc88a8a8894c9dfc8ccd3d9df" rel="noreferrer noopener nofollow">[email protected]</a>
...

现在systemctl enable按预期工作。

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

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

我使用的是 Ubuntu 16.04 和 systemd=229


顺便说一句:如果我在启用该服务后将其替换为符号链接(symbolic link),它仍然适用于某些 systemctl 命令(daemon-reload开始停止状态),而已启用启用disable 都会失败:

Failed to execute operation: Too many levels of symbolic links

我觉得很奇怪,我没有尝试重新启动我的系统来看看是否有效......

最佳答案

您不需要符号链接(symbolic link)。只需使用

systemctl start/enable <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4d2034123e283f3b242e280d3f382323283f7d7d7c633e283f3b242e28" rel="noreferrer noopener nofollow">[email protected]</a> 。然后,systemd 将直接使用您的模板。

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

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

关于systemd - 如何启用单元模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46848335/

相关文章:

python - 系统服务音频输出

linux - 如果重新启动其依赖服务,如何重新启动服务

python - 如何使用 systemd 永远运行 python 脚本并在树莓派 3 上中途死掉时重新启动?

shell - 在 cronjob 中启动/停止 systemd 服务

linux - 在停用另一个服务之前激活并运行 oneshot 服务

angularjs - http-server 未在 systemd 中启动

shell - 将 systemd 脚本转换为 CentOS 6 的 .init 脚本

linux - Linux 中的 sleep 机制如何工作

linux - 是什么在拖延我的 systemd 用户计时器?

linux - systemd After=nginx.service 不工作