我有三个 systemd 服务(Docker 容器,但这并不重要)。所有这三个服务都必须运行,应用程序才能完全正常运行。
为了简化操作团队的流程,我创建了 forth systemd 服务,使用Requires
和PartOf
指令将它们全部组合在一起。启动和停止此 forth 服务现在将以正确的顺序启动和停止三个容器。
最后一个挑战是让第四个 systemd 服务显示正确的状态。现在启动服务后它显示“已加载/未激活”。是否可以配置它,使其仅在前三个服务启动并运行时才显示“已加载/激活”?
[Unit]
Description=This is the group
Requires=a.service b.service c.service
[Service]
ExecStart=/bin/echo "Starting"
ExecStop=/bin/echo "Stopping"
[Install]
WantedBy=local.target
,并包含a.service
b.service
c.service
PartOf=group.service
答案1
我认为你需要添加一个After=
条款。如果你的三项服务是相互关联的,你也许还可以简化你的Requires
。
如果您还希望当其他三项服务停止时第四项服务也停止,那么您也需要添加一个BindsTo
条目。
例如:
[Unit]
Description=This is the group
Requires=c.service
After=c.service
BindsTo=c.service