Systemd 订购周期

Systemd 订购周期

我希望有人能指出我在这方面的正确方向。

我有一个新的 systemd 路径单元(见下文),它阻止 sshd.service 启动,根据下面的“journalctl -u sshd”条目。

很明显我弄错了什么,但我不知道是什么——救命!:-)

提前致谢

杂志:

Oct 10 17:08:28 host1.example.local systemd[1]: multi-user.target: Found ordering cycle on sshd.service/start
Oct 10 17:08:28 host1.example.local systemd[1]: multi-user.target: Found dependency on sshd-keygen.target/start
Oct 10 17:08:28 host1.example.local systemd[1]: multi-user.target: Found dependency on [email protected]
Oct 10 17:08:28 host1.example.local systemd[1]: multi-user.target: Found dependency on basic.target/start
Oct 10 17:08:28 host1.example.local systemd[1]: multi-user.target: Found dependency on paths.target/start
Oct 10 17:08:28 host1.example.local systemd[1]: multi-user.target: Found dependency on path-watch.path/start
Oct 10 17:08:28 host1.example.local systemd[1]: multi-user.target: Found dependency on multi-user.target/start
Oct 10 17:08:28 host1.example.local systemd[1]: multi-user.target: Job sshd.service/start deleted to break ordering cycle starting with multi-user.target/start

路径单元文件:

[Unit]
Description=Watch for changes (updates) to /mypath
Wants=network-online.target
After=multi-user.target

[Path] 
PathChanged=/mypath/

[Install]
WantedBy=multi-user.target

编辑:另外,如果这应该发布在其他地方而不是简单的“嘿,您可能会在 XYZ 列表上得到更好的答案”,我们将不胜感激。

答案1

我认为问题的核心在于Before=路径单元自动具有对 paths.target的类型依赖性,因此您的设备已有效配置为启动 paths.target multi-user.target(这是不可能的,因为前者很早,后者很晚)。您可以尝试DefaultDependencies=no在该[Unit]部分中进行设置,尽管这似乎不受欢迎。最好考虑一下您是否确实需要路径单元与 具有指定的排序关系multi-user.target

答案2

路径单元的文档:

默认依赖项

DefaultDependencies=no除非设置,否则将添加以下依赖项:

  • 路径单元将自动具有 , [..] 类型的依赖Before=关系paths.target。只有涉及早期启动或后期系统关闭的路径单元才应禁用DefaultDependencies=该选项。

所以,这个单元有以下排序关系:

  • Before=paths.target
  • After=multi-user.target

multi-user.target来了basic.target,这来了paths.target,它位于该路径单元之后,它位于multi-user.target,which ...之后。

相关内容