systemd 启动一个服务,该服务在禁用的服务之后排序

systemd 启动一个服务,该服务在禁用的服务之后排序

服务 B 单元配置(它是一次性服务):

[Unit]
Description=Service B
After=serviceA.service

服务A默认是禁用的(它是一个简单的服务)

● serviceA.service - service A
Loaded: loaded (/usr/lib/systemd/system/serviceA.service; disabled; vendor preset: disabled)
Active: inactive (dead)

由于订购要求,我希望服务 B 在服务 A 启动之前不会启动。我观察到的是,当机器启动时,服务 B 启动而无需等待服务 A。谁能解释一下这个

答案1

如果您只想在启动(并且正在运行)serviceB.service时启动,那么您应该将: 添加到您的.serviceA.serviceRequisiteserviceB.service

man systemd.unit

必备条件=

类似于 Requires=。但是,如果此处列出的单元尚未启动,则它们将不会启动,并且该单元的启动将立即失败。 Requisite= 并不意味着排序依赖性,即使两个单元都是在同一事务中启动的。因此,此设置通常应与 After= 结合使用,以确保该单元不会在其他单元之前启动。

服务B.服务

[Unit]
Description=Service B
After=serviceA.service
Requisite=serviceA.service

[Service]
Type=oneshot
ExecStart=/bin/bash /home/user/somescript.sh

[Install]
WantedBy=multi-user.target

例如,如果您没有启用serviceA.service或者当想要运行时它没有运行,serviceB.service那么您应该在日志中收到如下消息serviceB.service

A dependency job for serviceB.service failed. See 'journalctl -xe' for details.

相关内容