我有两个版本的服务,我偶尔想在它们之间切换 - my-service-a 和 my-service-b。我希望 my-service-a 始终是系统启动时运行的服务。目前,要在它们之间切换,我必须运行多个命令,例如从 a 切换到 b
systemctl stop my-service-a
systemctl start my-service-b
而且 systemd 并没有强制规定一次只有一个运行 - 我只是必须小心。
systemd 中有对这种情况的直接支持吗?我可以将其视为对服务之间“切换”的支持,或模板化服务的实例化,或者我可以将其视为对互斥服务的支持,因此当我启动 my-service-b 时,my-service-a自动停止。或者也许还有另一种完全的方式。
答案1
您可以通过将Conflicts=
指令添加到[Unit]
两个单元文件的部分来完成此操作(Conflicts=
在一个单元文件中也可以)。从手册页中系统单元(5):
以空格分隔的单位名称列表。配置负面需求依赖性。如果一个单元在另一个单元上有 Conflicts= 设置,则启动前者将停止后者,反之亦然。请注意,此设置与 After= 和 Before= 排序依赖关系无关且正交。