Systemd:特定服务后启动服务

68 systemd

一般问题:如何.service在特定.service成功启动后启动systemd ?

具体问题:如何在开始website.service后才mongodb.service开始?换句话说website.service应该依赖mongodb.service.

小智 94

在[Unit]部分下的.service文件中:

[Unit]
Description=My Website
After=syslog.target network.target mongodb.service
Run Code Online (Sandbox Code Playgroud)

重要的是 mongodb.service

该联机帮助页描述了它,但由于格式化,它在第一眼看上去并不清楚

systemd.unit - 格式正确

systemd.unit - 格式不太好


Umu*_*mut 41

After=依赖性仅在After=包含服务和包含服务时After=计划在启动时启动时才有效.

例如:

a.service
[Unit]
After=b.service
Run Code Online (Sandbox Code Playgroud)

这样一来,如果同时a.serviceb.service启用,然后systemd订货会b.service之后a.service.

如果我没有误会,你问的是如何在启动b.servicea.service启动,即使b.service没有启用.

这个指令是Wants=Requires=[Unit].

website.service
[Unit]
Wants=mongodb.service
After=mongodb.service
Run Code Online (Sandbox Code Playgroud)

之间的区别Wants=,并Requires=是与Requires=中,启动失败b.service将导致启动a.service失败,而使用Wants=,a.service即使将启动b.service失败.这在man的手册页.unit详细解释.

  • 我相信真相与这个答案完全相反.`after = website.service`表示"在website.service之后执行我的单位!".这就是文档中解释的内容:["After =确保在列出的单元完成启动后启动已配置的单元"](https://www.freedesktop.org/software/systemd/man/systemd.unit.html #=前).我假设"列出的单位"是"After ="右侧的单位. (5认同)
  • “这样,如果a.service和b.service都启用了,那么systemd将在a.service之后订购b.service。”您的意思不是相反吗?`交换(a,b)` (2认同)