我希望有人能指出我在这方面的正确方向。
我有一个新的 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 ...之后。