시스템 서비스가 충돌하거나 다시 시작될 때 신호를 수신할 수 있습니까?

시스템 서비스가 충돌하거나 다시 시작될 때 신호를 수신할 수 있습니까?

이것은 systemd 서비스에 대한 초보자 질문이지만 두 개의 systemd 데몬이 있다고 가정하면 그 중 하나가 다른 데몬이 충돌했거나 다시 시작되었는지 아는 것이 중요합니다. 이 이벤트를 들을 수 있나요? 그렇다면 어떻게 들을 수 있을까요?

답변1

저는 보통 일반 IPC를 사용합니다. 두 프로세스 간에 메모리나 소켓을 직접 공유합니다.

프로그램이 C로 작성된 경우 systemd를 사용할 수 있습니다 #include <systemd/sd-bus.h>. 이것은 systemd의 dbus 인터페이스를 둘러싼 래퍼입니다. 여기에서 단위를 모니터링할 수 있습니다. 속성이 변경될 때마다 내보내지는 유닛의 "PropertiesChanged" 멤버를 구독할 수 있습니다. 이 신호가 변경되면 "ActiveState" 멤버를 쿼리합니다.

좋은 예는 다음과 같습니다.

https://unix.stackexchange.com/a/527350/272848

관련 정보