【问题标题】:systemd adding service into multi-user.target.wants folder only works as a symlink [closed]systemd 将服务添加到 multi-user.target.wants 文件夹仅用作符号链接 [关闭]
【发布时间】:2019-08-14 14:07:48
【问题描述】:

我一直在添加一些 systemd 服务。我从我的服务开始是来自以下的符号链接:

/etc/systemd/system/multi-user.target.wants/myservice.service -> /home/myservice.service

这似乎工作正常。但如果我删除符号链接并将其设为具体文件,则服务不会加载(systemctl daemon-reload 找不到它)。

但是,如果我将服务移至 /etc/systemd/system/myservice.service,那么它工作正常。

因此,似乎要在 multi-user.target.wants 中运行服务,它需要是一个符号链接。这是为什么?有办法解决吗?

我之前在 multi-user.target.wants 中看到过指向 ../myservice.service 的符号链接...我猜我偶然发现了其中的原因!?

【问题讨论】:

  • @Rob 你可能是对的,那是我的错误——使用它是一种习惯。而且,感谢您花时间解释-这种情况发生得太少了:)在旁注中-我可以移动这个问题吗(因为我zbyszek已经不厌其烦地回答了,我不想否认他们的观点)? - 我也将投票关闭它以使其越界:o
  • 我不知道。您可以在 meta.stackoverflow.com 上询问模组可以帮助您的地方。

标签: linux systemd


【解决方案1】:

.wants/.requires/ 目录中只允许使用符号链接。通过自定义,符号链接是指向/etc/systemd/system//usr/lib/systemd/system/ 或其他单元目录之一中的实际单元文件。但是 systemd 并不太关心符号链接目标。 (符号链接的目标目录被完全忽略。符号链接目标的最后一个组件被检查,如果目标名称与符号链接名称不匹配,较新的 systemd 会发出警告,但仍会接受它)。符号链接的存在表明需要创建 Wants 或 Requires 依赖项。

.wants/.requires/ 目录是一种声明依赖关系的机制。但要实际加载单元,systemd 需要找到单元文件。它需要位于其中一个目录中(/etc/systemd/system//usr/lib/systemd/system/ 等)。

您可能会对旧的 systemd 会遵循来自 .wants/.requires/ 的单元符号链接并加载单元文件这一事实感到困惑。这是有问题的,原因有两个:首先,systemd 对目录有优先顺序,并且它应该将单元文件加载到具有最高优先级的目录中。但是符号链接可能指向优先级较低的目录中的单元文件。为了保持一致,systemd 必须忽略符号链接目标,并按顺序搜索目录。第二个原因是符号链接可能指向搜索路径之外的文件。如果 systemd 允许加载此类单元,则这些单元可以作为另一个单元的依赖项加载,但是当被要求直接加载该单元时,systemd 将无法找到它。较新的 systemd 从不遵循此类符号链接。

上一段中的第二个原因也是为什么 systemd 不允许 .wants/.requires/ 中的真实文件:该单元只能作为另一个单元的依赖项加载,但不能直接加载。

有两种正确的处理方法:

  1. 将单元文件移动到单元目录之一,例如/etc/systemd/system/myservice.service,并从 multi-user.target.wants/ 符号链接到它。
  2. 将单元文件保存在其他地方,例如~/myservice.service,并从单元目录之一对其进行符号链接,例如/etc/systemd/system/myservice.service,以及从 multi-user.target.wants/ 指向该符号链接的符号链接。

另请参阅 systemctl linksystemctl enable,它们可以为您创建这些符号链接。

【讨论】:

    猜你喜欢
    • 2019-05-27
    • 2019-01-31
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 2013-04-01
    相关资源
    最近更新 更多