"서비스 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"를 종료하지 않는지 확인하고 싶습니다.
그러나 맨페이지에 따르면 이는 양방향 관계입니다.
한 유닛이 다른 유닛에 충돌=을 설정한 경우 전자를 시작하면 후자는 중지되고 그 반대의 경우도 마찬가지입니다.
따라서 충돌하는 지침을 피해야 합니다.