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줄짜리로 만드세요:

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

관련 정보