我有一个普遍的问题。如何在特定的*.service
成功启动后启动systemd unit *.service
?
更具体的问题是,我如何在mongodb.service
成功启动后仅启动website.service
?换句话说,website.service
应该依赖于mongodb.service
。
我有一个普遍的问题。如何在特定的*.service
成功启动后启动systemd unit *.service
?
更具体的问题是,我如何在mongodb.service
成功启动后仅启动website.service
?换句话说,website.service
应该依赖于mongodb.service
。
[Unit]
Description=My Website
After=syslog.target network.target mongodb.service
重要的部分是 mongodb.service
尽管手册描述了它,但由于格式问题,一开始并不是很清晰
After=
依赖项仅在服务(包括 After=
)和由 After=
包含的服务都计划作为引导的一部分启动时才有效。
例如:
a.service
[Unit]
After=b.service
如果同时启用了a.service
和b.service
,那么systemd将会在a.service
之后排序b.service
。
如果我没有误解你的意思,你的问题是如何在b.service
未启用的情况下,在a.service
启动时启动b.service
。
这个指令是在[Unit]
下使用Wants=
或Requires=
。
website.service
[Unit]
Wants=mongodb.service
After=mongodb.service
Wants=
和 Requires=
的区别在于,使用 Requires=
,如果无法启动 b.service
,将导致无法启动 a.service
,但是使用 Wants=
,即使 b.service
失败,a.service
也会启动。详细信息请参见.unit
的 man 页面。After=website.service
的意思是“在 website.service 运行后再运行我的单元!”。文档中已经解释了这一点:"After= 保证配置的单元在列出的单元启动完成后启动"。我假设“列出的单元”指的是在“After=”右边的单元。 - Sindarusswap(a, b)
- Mateen UlhaqAfter=
仅在服务同时启动时(例如引导)才发挥作用,否则 After=
毫无意义。添加 Wants=
或 Requires=
以自动启动另一个进程。请注意,这些设置与由 Requires=、Wants=、Requisite= 或 BindsTo= 配置的要求依赖关系是独立且正交的。常见的模式是在 After= 和 Wants= 选项中都包含一个单元名称,在这种情况下,列出的单元将在使用这些选项配置的单元之前启动。 - RcoderNY