当其他服务正在启动时暂时停止某些服务

当其他服务正在启动时暂时停止某些服务

我有两项服务,一项是核心服务,一项是本质上监督核心服务的服务。它们的生命周期指定如下:

  • 核心服务启动时应启动监视服务
  • 当核心服务出现故障时,守望先锋服务应该保持活动状态

将这些约束实现为两个 systemd 服务非常简单,只需拥有两个独立的服务,并core启动overwatch

core.service

[Unit]
Description=Some Core Service
Wants=overwatch.service

[Service]
Type=forking
ExecStart=/some/core/executable

# ...

overwatch.service

[Unit]
Description=Some Overwatch Service

[Service]
Type=simple
ExecStart=/some/overwatch/executable

# ...

不过,我有另一个限制: 启动期间coreoverwatch服务无法处于活动状态。我尝试的解决方案是overwatch在开始之前立即停止core,然后再开始overwatch。为此,我尝试向服务添加一个ExecStartPre和一个Before指令core,如下所示:

[Unit]
Description=Some Core Service
Wants=overwatch.service
Before=overwatch.service

[Service]
Type=forking
ExecStart=/some/core/executable
ExecStartPre=+systemctl stop overwatch.service

# ...

现在overwatch如果死亡仍然活着,但它也会在再次开始core之前成功停止。但是,由于和指令core,我预计 systemd 在成功启动后也会再次启动它。coreWantsBefore但这并没有发生

什么工作是在指令中手动再次启动它ExecStartPost

[Unit]
Description=Some Core Service

[Service]
Type=forking
ExecStart=/some/core/executable
ExecStartPre=+systemctl stop overwatch.service
ExecStartPost=+systemctl start overwatch.service

# ...

但我想知道是否有更好的方法。最好是推荐的描述性方式来表达我的要求,而不是(ab)使用启动前和启动后挂钩来手动停止和启动另一个服务。

相关内容