有没有办法将两个实例化的 systemd 服务作为一个单元进行控制?

有没有办法将两个实例化的 systemd 服务作为一个单元进行控制?

我有几个 python web 服务,想在 Fedora 15 机器上运行。它们由 paster 运行,启动它们的唯一区别是它们读取的配置文件。

这似乎很适合 systemd 的实例化服务,但我希望能够将它们作为一个单元进行控制。需要两个服务的 systemd 目标似乎是实现这一目标的方法。启动目标确实会启动两个服务,但停止目标会使它们保持运行。

这是服务文件:

[Unit]
Description=AUI Instance on Port %i
After=syslog.target

[Service]
WorkingDirectory=/usr/local/share/aui
ExecStart=/opt/cogo/bin/paster serve --log-file=/var/log/aui/%i deploy-%i.ini        
Restart=always
RestartSec=2
User=aui
Group=aui

[Install]
WantedBy=multi-user.target

这是目标文件:

[Unit]                    
Description=AUI           
[email protected]
[email protected]
After=syslog.target   

[Install]                 
WantedBy=multi-user.target

使用 systemd 可以实现这种分组吗?

答案1

看看如何使用BindsTo选项将单元绑定在一起。systemd.unit(5)手册页对此进行了如下描述:

绑定到=

配置需求依赖项,风格与 Requires= 非常相似,但除了此行为之外,它还声明当列出的任何单元突然消失时,此单元将停止。如果服务自行终止、设备被拔出或挂载点在未涉及 systemd 的情况下被卸载,单元可能会突然、意外地消失。

这听起来应该做你想做的事,将一个单元绑定到另一个单元,这样每当主单元停止时,从单元也会停止,反之亦然。

不要忘记,如果有必要,您还可以使用Before/After来指定它们的启动顺序。

相关内容