在特定服务之后启动 systemd 服务? [关闭]

Posted

技术标签:

【中文标题】在特定服务之后启动 systemd 服务? [关闭]【英文标题】:Start systemd service after specific service? [closed] 【发布时间】:2014-03-16 20:13:45 【问题描述】:

我有一个一般性问题。在特定的*.service 成功启动后,如何启动系统单元*.service

更具体的问题是,我如何在mongodb.service 启动后才启动website.service?换句话说,website.service 应该依赖于mongodb.service

【问题讨论】:

这个问题属于ServerFault,没有? @Rémi 两个站点都可以! :) @AnonymousPenguin 不,只是在您回复之前 3.5 年,这不是 SO 的主题问题。这与编程无关。 SF 或者更好的 Unix/Linux.SE 会更合适。 Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地点。 可能相关的ServerFault问题:serverfault.com/questions/812492/… 【参考方案1】:

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

[Unit]
Description=My Website
After=syslog.target network.target mongodb.service

重要的部分是mongodb.service

手册页对其进行了描述,但是由于格式设置,乍一看并不那么清楚

systemd.unit - well formatted

systemd.unit - not so well formatted

【讨论】:

我们的 mongod 服务启动了一个非常大的数据库。后续服务无法正确启动,因为启动后似乎 mongo 需要更多时间来加载数据库。所以我们的第二个服务启动但失败了,因为 mongo 已经成功启动但还没有加载数据库。也许延迟会有所帮助... systemd 服务是否可以处理以下场景。考虑多个服务 A、B、C、D 。如果 A 存在,我希望 B、C、D 仅在 A 之后启动,否则如果 A 不存在 B、C、D 可以按任何顺序启动。请帮忙 @achilles 你能在不需要 A 的系统上创建一个假服务 A。这样B、C、D的依赖关系就可以保持简单。 正确的 html 文档在这里:freedesktop.org/software/systemd/man/systemd.unit.html【参考方案2】:

After= 依赖项仅在包括After= 的服务和After= 包括的服务都计划作为启动的一部分启动时才有效。

例如:

a.service
[Unit]
After=b.service

这样,如果a.serviceb.service启用,那么systemd 将在a.service 之后排序b.service

如果我没有误解,您要问的是如何在a.service 启动时启动b.service,即使b.service 未启用。

用于此的指令是Wants=Requires=[Unit] 下。

website.service
[Unit]
Wants=mongodb.service
After=mongodb.service

Wants=Requires=的区别在于Requires=启动失败b.service会导致a.service启动失败,而Wants=,a.service甚至会启动如果b.service 失败。这在the man page of .unit 上有详细解释。

【讨论】:

我相信事实与这个答案完全相反。 After=website.service 表示“在 website.service 之后执行我的单元!”。这就是文档中解释的内容:"After= ensures that the configured unit is started after the listed unit finished starting up"。我假设“列出的单位”是“After=”右侧的单位。 "这样的话,如果a.service和b.service都开启了,那么systemd会在a.service之后订购b.service。"你的意思不是反过来吗? swap(a, b)

以上是关于在特定服务之后启动 systemd 服务? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

linux启动流程systemd关闭服务的三个层次

Systemd 添加自定义服务(开机自启动)

Linux:systemd配置jar启动服务

Linux:systemd配置jar启动服务

#yyds干货盘点#systemd管理服务和特性

Centos7 Systemd 使用详解