systemd 之前和之后的声明

Wim*_*eka 9 dependencies systemd services

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 单元文件声明哪些依赖项?有关系吗?

meu*_*euh 13

您只需要一个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
Run Code Online (Sandbox Code Playgroud)

如果您正在upstart这里转换,您可能会从这里得到一些提示,您可以阅读这里列出的所有博客,标题为 Systemd for Administrators 博客系列