![래퍼를 통해 실행 파일을 실행하는 시스템 서비스는 watchdog에 알릴 수 없습니다.](https://linux55.com/image/221233/%EB%9E%98%ED%8D%BC%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EC%8B%A4%ED%96%89%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EC%84%9C%EB%B9%84%EC%8A%A4%EB%8A%94%20watchdog%EC%97%90%20%EC%95%8C%EB%A6%B4%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
저는 바이너리 실행 파일을 "알림" 유형 서비스로 실행하는 시스템 서비스 파일을 사용하고 있습니다. 실행 파일은 C 언어 API sd_notify
기능을 사용하여 systemd watchdog에 "ping"을 보냅니다. 그러나 이제 실행 파일을 bash 스크립트로 래핑해야 합니다.
내가 겪고 있는 문제는 systemd가 래핑된 바이너리가 아닌 래퍼 스크립트에 속하는 "마스터 pid"에서만 워치독 핑을 허용하기 때문에 워치독 핑이 거부된다는 것입니다. 이러한 핑을 수락해야 함을 systemd에 알릴 수 있는 방법이 있습니까?
답변1
래퍼 스크립트 exec
를 하위 파일로 실행하는 대신 기본 바이너리로 설정하세요. 스크립트는 기본 실행 파일로 대체되며 동일한 PID를 유지합니다.
(스크립트가 뭔가를 해야 한다면뒤쪽에바이너리 종료 - systemd로 들어가 ExecStartPost=
거나 ExecStopPost=
대신에 들어가야 합니다. )
NotifyAccess=
알림 소켓이 cgroup 내의 모든 프로세스에 액세스하도록 허용하는 것을 포함하여 몇 가지 대안이 있지만 주로 올바른 프로세스를 추적하지 않는 "마스터 PID"의 실제 문제를 해결합니다.