systemd 서비스를 종료할 때 실패한 디버깅 알림 보내기

systemd 서비스를 종료할 때 실패한 디버깅 알림 보내기

서비스 A와 서비스 B라는 두 가지 서비스가 있습니다. 서비스 A는 유형 notify이고 서비스 B는 유형입니다 simple. 서비스 B는 After=serviceA.service서비스 A가 준비되었다는 알림을 보낸 후에만 서비스 B가 시작되도록 설정됩니다.

알림을 보내지 않거나 오류(예:)가 있는 알림을 보내지 않고 서비스 A가 0이 아닌 코드로 종료되는 상황을 확인하고 있습니다 ERRNO=2. 서비스 B는 서비스 A가 실행될 때까지 기다리지만 서비스 A가 실패하자마자 서비스 B가 실행을 시작합니다. 서비스 B는 서비스 A가 READY=1. 서비스 B가 실행을 시작하도록 트리거하는 알림을 디버깅하려면 어떻게 해야 합니까? 이 동작도 예상됩니까?

답변1

~에서man systemd.unit:

이후 =

... After= 구성된 장치가 시작되기 전에 나열된 장치가 완전히 시작되는지 확인합니다. ...구성된 모든 시작 명령이 호출되고 해당 명령이 실패하거나 성공적인 시작을 보고하면 시작이 완료된 것으로 간주됩니다.

따라서 After=종속성은 serviceA가 성공적으로 시작되거나 실패한 후에 serviceB를 시작합니다.

당신이 찾고 있는 것은 다음의 조합입니다:

After=serviceA
Requires=serviceA

~에서man systemd.unit:

필요=

...이 유닛이 활성화되면 나열된 유닛도 활성화됩니다. 다른 장치 중 하나가 활성화되지 않고 주문 종속성 After=가 실패한 장치에 설정된 경우 해당 장치는 시작되지 않습니다.

여기에는 닫기 논리와 관련된 몇 가지 추가 트릭이 있습니다. serviceA가 성공적으로 완료되면 serviceB가 계속 실행됩니다. serviceA가 명시적으로 중지되거나 다시 시작되면 serviceB도 중지되거나 다시 시작됩니다.

serviceA가 자연스럽게 중지될 때 serviceB가 종료되도록 하려면 BindTo=종속성을 사용하십시오.

관련 정보