为什么在禁用服务时会删除链接?(文件不是)

WoJ*_*WoJ 6 systemd

我想通过将.service文件放入/etc/systemd/system. 我的源.service文件在/opt/something.service.

安装时我有两个选择:

  • cp /opt/something.service /etc/systemd/system
  • ln -s /opt/something.service /etc/systemd/system

当我startenable服务(服务正常工作)时,这两种方法都有效。

然而,禁用服务时有区别:

  • 在副本的情况下,/etc/systemd/system/something.service保留
  • 在链接的情况下,/etc/systemd/system/something.service被删除

这是故意的吗?这很烦人,因为在禁用通过链接创建的服务后,这还不够enable——还必须重新创建服务单元。

Mun*_*nir 5

是的,这是设计使然。

手册页systemctl disable说:

禁用一个或多个单元。这将从单元配置目录中删除所有指向指定单元文件的符号链接,从而撤消 enable 所做的更改。但是请注意,这会删除单元文件的所有符号链接(即包括手动添加),而不仅仅是由 enable 实际创建的符号链接。

这是它的链接:https : //www.freedesktop.org/software/systemd/man/systemctl.html#

它没有解释为什么,但我可以猜测它无法区分使用systemctl enable创建的链接和手动创建的链接,因为它正在寻找指向单元文件的链接。

link创建指向 systemd 搜索路径之外的源文件的符号链接时,应使用systemctl 中的选项。也来自同一个手册页。

链接文件名...

将不在单元文件搜索路径中的单元文件链接到单元文件搜索路径。这需要单元文件的绝对路径。可以通过禁用来撤消此效果。该命令的作用是一个单元文件可用于启动和其他命令,尽管它没有直接安装在单元搜索路径中。

  • `/etc/systemd/system` 是一个单元配置目录。你的源文件在 `/opt` 中,它保持不变。 (2认同)