Systemd: 한 장치가 실행 중이고 다른 장치가 실행 중인지 확인하는 방법은 무엇입니까?

Systemd: 한 장치가 실행 중이고 다른 장치가 실행 중인지 확인하는 방법은 무엇입니까?

"서비스 A"와 "서비스 B"가 있습니다. "serviceA"는 타이머를 사용하여 12시간마다 실행되고 "serviceB"는 15분마다 실행됩니다. "serviceB"가 현재 실행 중이면 "serviceA"는 절대 실행되지 않고 그 반대의 경우도 마찬가지인지 확인하고 싶습니다. 또한 "serviceA"가 "serviceB"가 실행되고 "serviceB"가 현재 실행 중일 때 "serviceB"를 종료하지 않는지 확인하고 싶습니다.

systemd로 이 작업을 어떻게 수행할 수 있나요?

답변1

사용실행이 시작되기 전에:

맨페이지 ExecStartPre 항목에서 다음을 수행합니다.

"-" 접두사 없이 이러한 명령 중 하나라도 실패하면 나머지 명령은 실행되지 않으며 장치는 실패한 것으로 간주됩니다.

서비스 A

[Unit]
Description=Service A 12 hours on timer

[Service]
Type=oneshot
# Check and see if serviceB is running
ExecStartPre="! systemctl is-active --quiet serviceB"
Restart=no
...

서비스 B

[Unit]
Description=Service B 15 mins on timer

[Service]
Type=oneshot
# Check and see if serviceA is running
ExecStartPre="! systemctl is-active --quiet serviceA"
Restart=no
...

갈등

Conflicts지시문을 사용하면 이 지시문이 설정된 서비스가 시작될 때 지정된 서비스가 중지됩니다. 당신은 다음과 같이 언급했습니다.

또한 "serviceA"가 "serviceB"가 실행되고 "serviceB"가 현재 실행 중일 때 "serviceB"를 종료하지 않는지 확인하고 싶습니다.

그러나 맨페이지에 따르면 이는 양방향 관계입니다.

한 유닛이 다른 유닛에 충돌=을 설정한 경우 전자를 시작하면 후자는 중지되고 그 반대의 경우도 마찬가지입니다.

따라서 충돌하는 지침을 피해야 합니다.

관련 정보