ExecCondition 我怎样才能让它做相反的事情?

ExecCondition 我怎样才能让它做相反的事情?

我想将脚本中的 SysV 服务迁移到 systemd 中的单元文件中。我有两台机器,一台主机,一台副机。在两台机器上,该服务将在启动时启用,但该服务将始终在主机器上运行。我想添加一个 ExecCondition,以验证另一台计算机上的服务状态,并根据此继续执行以下命令或直接不执行任何操作。

systemctl is-active myservice -H kbc01

该命令显示活动或非活动状态

active (0)
inactive (3)

我的想法是,如果另一台计算机中的服务处于活动状态(0),则不会执行以下 ExecStart 命令。如果另一台计算机上的服务已关闭 (3),请运行以下 Execstart 命令。

systemd 文档说以下 ExecCondition= 命令退出,退出代码为 1 到 254(含),其余命令将被跳过,并且该单元不会被标记为失败。

我怎样才能让它做相反的事情?

主机(kbc01):

[Unit]
Description=Aplication 
After=local-fs.target network-online.target

[Service] 
ExecCondition=systemctl is-active myservice -H kbc01
ExecStart=/home/user/aplication/bin/myservicestart
ExecStop=/home/user/aplication/bin/myserviceshutdown 
Restart=on-failure

[Install] 
WantedBy=multi-user.target

辅助机器(kbc02):

[Unit] 
Description=Aplication 
After=local-fs.target network-online.target

[Service]
ExecCondition=systemctl is-active myservice -H kbc02 
ExecStart=/home/user/aplication/bin/myservicestart
ExecStop=/home/user/aplication/bin/myserviceshutdown
Restart=on-failure

[Install]
WantedBy=multi-user.target

答案1

systemctl is-active您可以使用您的逻辑调用 bash 脚本,而不是直接调用:

[Service]
ExecCondition=/usr/local/sbin/myservice-is-needed kbc02
#!/bin/bash
# /usr/local/sbin/myservice-is-needed

systemctl is-active myservice -H "$1"
retval=$?

if [ "$retval" -ne 0 ]; then 
    exit 0;
fi

exit 1

或者将其设为 1-liner:

[Service]
ExecCondition=/bin/bash -c '! systemctl is-active myservice -H kbc02'

相关内容