systemd 재시작 임계값 제한

systemd 재시작 임계값 제한

관련된: 시스템 재시작 버스트 제한

저는 카메라 서비스를 운영하는 상용 제품을 개발 중입니다. 이 서비스는 시스템이 제대로 작동하는 데 중요합니다. 지금까지는 훌륭했습니다. 낮은 수준의 프로토콜/드라이버 문제로 인해 서비스가 실패하면 서비스를 다시 시작할 수 있습니다. 다음은 서비스 다시 시작 및 재부팅 논리를 처리하는 .service 단위 파일의 조각입니다.

...
[service]
Restart=on-failure
StartLimitInterval=2min
StartLimitBurst=5
StartLimitAction=reboot-force
...

어떤 경우에는(예: 버스 오류) 여러 번 재부팅해도 시스템 복원에 도움이 되지 않을 수 있습니다. 이 경우 장치 재부팅을 중지하고(사용자에게 불편을 줄 수 있으므로) 카메라 파이프라인을 복원하려는 모든 시도를 중지하려고 합니다. 이는 추가 재부팅을 중지하기 전에 장치가 거치는 재부팅 횟수를 간단히 추적하는 모니터링 서비스를 사용하여 달성할 수 있습니다.

또 다른 옵션은 이 목적을 위해 별도로 다른 모니터링 서비스를 추가하는 대신 systemd에 의존하는 것입니다(이는 차례로 systemd에 의해 모니터링됩니다). 나는 시스템 옵션을 찾고 문서/예제를 읽어 그러한 재시작 임계값이 존재하는지 확인하는 데 시간을 보냈습니다. 재부팅 횟수를 구성 가능한 StartLimitReboot로 제한하는 방법을 찾고 있습니다.

너무 길어요.

나는 이런 것을 성취하고 싶다

...
[service]
... 
...
... 
StartLimitReboot=3 # stop rebooting after this limit
...

systemd는 아직 그러한 의미 체계를 지원하지 않는 것처럼 보이지만 지원한다면 내 작업이 많이 단순화될 것입니다.

답변1

아니요, systemd여러 번의 재시작을 관리한 후 재시작을 중지할 수 있는 기능은 없습니다.

애플리케이션이 두 번 실패하고 두 번 다시 시작을 트리거 StartActionLimit하고 2주 동안 안정적으로 유지된 다음 훨씬 나중에 이런 방식으로 세 번째 다시 시작을 트리거하는 상황을 생각해 보세요. StartLimitReboot=3이 상황에서 이론이 촉발될 것이라고 기대하십니까 ?

그렇지 않은 경우 "재시작 카운터"가 만료되도록 허용하는 시간 초과 값이 있어야 합니다. 이는 서비스가 다시 시작되는 속도를 측정하는 타이머와 다릅니다. 다시 시작 타이머는 서비스를 다시 시작하기 전에 컴퓨터를 시작하는 데 걸리는 시간을 고려해야 하기 때문입니다.

또한 심각한 서비스 오류로 인해 시스템이 부팅 루프에 갇힌 경우 시스템을 유지하는 것이 합리적입니까?존재하다중요한 서비스가 작동하지 않으면 어떻게 해야 합니까? 아니면 이후에 포기하고 전원을 꺼야 합니까?

여기에서 도움을 받는 데 관심이 있다는 것을 알 수 있지만 systemd이 기능이 곧 제공될 것으로 예상하지는 않습니다.

관련 정보