systemd 声明之前和之后

systemd 声明之前和之后

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.serviceb.service。我想a.service之前完全启动,b.service因为b.service取决于a.service

阅读上述手册页后,我找不到关于是否:的任何结论性解释:

  • 仅有的需要Before=b.servicea.service单元文件中指定
  • 仅有的需要After=a.serviceb.service单元文件中指定
  • 你需要两个都 After=a.serviceb.service单元文件中 Before=b.servicea.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 博客系列

相关内容