man for systemd unit 中给出的定义有点不清楚:https://www.freedesktop.org/software/systemd/man/systemd.unit.html
如果一个单元
foo.service
包含设置Before=bar.service
并且两个单元都正在启动,bar.service
则 的启动会延迟到foo.service
启动。 [...]After=
是 的倒数Before=
,即 whileAfter=
确保配置的单元在列出的单元完成启动后启动,Before=
确保相反,配置的单元在列出的单元启动之前完全启动。
可以说我有a.service
和b.service
。我想a.service
之前完全启动,b.service
因为b.service
取决于a.service
。
阅读上述手册页后,我找不到关于是否:的任何结论性解释:
- 你仅有的需要
Before=b.service
在a.service
单元文件中指定 - 你仅有的需要
After=a.service
在b.service
单元文件中指定 - 你需要两个都
After=a.service
在b.service
单元文件中和Before=b.service
在a.service
单元文件中
我需要声明哪些 systemd 单元文件的依赖项?有关系吗?
答案1
您只需要其中一个After=
或Before=
一对单元中的一个。您可能更喜欢以下手册页中的内容systemctl
:
--after ... 任何 After= 依赖项都会自动镜像以创建 Before= 依赖项。
使用此选项来list-dependencies
检查您认为 systemd 应该做什么。例如
$ systemctl list-dependencies --after timers.target
timers.target
* |-sysstat-collect.timer
* |-sysstat-summary.timer
* |-systemd-tmpfiles-clean.timer
* `-unbound-anchor.timer
$ systemctl list-dependencies --before sysstat-collect.timer
sysstat-collect.timer
* |-sysstat-collect.service
* |-shutdown.target
* `-timers.target
如果您正在转换,upstart
您可能会得到一些提示这里,您可以阅读列出的所有博客这里在标题下面向管理员的 systemd 博客系列。