服务 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.service
Requisite
serviceB.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.