StartLimitInterval 후 시스템 서비스 자동 재시작 이상 예상대로 다시 시작되지

실패시 시스템 서비스가 자동으로 다시 시작되기를 원합니다. 또한 재시작 횟수를 제한하고 싶습니다. 90 초 동안 최대 3 번의 재시작을 허용하려고합니다. 따라서 다음 구성을 수행했습니다.

[서비스]
Restart = 항상
StartLimitInterval = 90
StartLimitBurst = 3

이제 서비스가 실패하면 다시 시작됩니다. 3 개의 빠른 실패 / 레스토랑 후에는 더 이상 예상대로 다시 시작되지 않습니다. 이제 타임 아웃 (StartLimitInterval) 후에 systemd가 서비스를 시작할 것으로 예상했습니다. 그러나 시간 초과 후 서비스를 수동으로 다시 시작하면 systemd는 시간 초과 (90 초) 후에 서비스를 자동으로 시작하지 않습니다. 그러나 StartLimitInterval 이후에 systemd가 서비스를 자동으로 시작하기를 원합니다. 이 기능을 달성하는 방법에 대해 알려주십시오.



답변

서비스를 90 초 간격으로 3 번 다시 시작하려면 시스템 서비스 파일에 다음 줄을 포함하십시오.

Restart=always
RestartSec=90
StartLimitInterval=400
StartLimitBurst=3

이것은 ‘Type = idle’을 사용하여 스크립트를 실행하는 서비스에서 저에게 효과적이었습니다. ‘StartLimitInterval’은 ‘RestartSec * StartLimitBurst’보다 커야합니다. 그렇지 않으면 서비스가 무기한으로 재시작됩니다.

systemd가 이러한 옵션을 사용하는 방법을 해결하는 데 많은 시행 착오를 겪는 데 시간이 걸렸습니다. 이는 systemd가 원하는 것만 큼 잘 문서화되지 않았 음을 나타냅니다. 이 옵션은 효과적으로 재시도주기 시간과 최대 재시도 횟수를 제공합니다.


답변

설명하는 동작은 설명서와 일치합니다.

StartLimitInterval =, StartLimitBurst =
서비스 시작 속도 제한을 구성합니다. 기본적으로 10 초 내에 5 번 이상 시작된 서비스는 10 초 간격이 끝날 때까지 더 이상 시작할 수 없습니다. 이 두 가지 옵션을 사용하면이 속도 제한을 수정할 수 있습니다. StartLimitInterval =을 사용하여 점검 간격을 구성하십시오 (관리자 구성 파일에서 기본값은 DefaultStartLimitInterval =이며, 모든 종류의 속도 제한을 사용하지 않으려면 0으로 설정 됨). 간격 당 시작이 허용되는 횟수를 구성하려면 StartLimitBurst =를 사용하십시오 (관리자 구성 파일에서 기본값은 DefaultStartLimitBurst =입니다). 이 구성 옵션은 Restart =와 함께 특히 유용합니다. 그러나 Restart = 논리에 의해 트리거 된 것만이 아니라 모든 종류의 시작 (수동 포함)에 적용됩니다.Restart =에 대해 구성되고 시작 한계에 도달 한 장치는 더 이상 다시 시작되지 않습니다. 그러나 나중에 다시 수동으로 다시 시작될 수 있으며이 시점부터 다시 시작 논리가 다시 활성화됩니다. systemctl reset-failed로 인해 서비스의 재시작 속도 카운터가 플러시됩니다. 이는 관리자가 수동으로 서비스를 시작하려고하고 시작 제한이이를 방해하는 경우에 유용합니다.

나는 아직도 당신이 원하는 행동을 달성하는 방법을 알아 내려고 노력하고 있습니다.


답변

몇 년 후 체계적으로 232 를 사용하면 질문과 2016의 답변에 설명 된 것처럼 더 이상 작동하지 않습니다. 옵션 이름 StartLimitIntervalSec과 섹션이 변경되었습니다. 이제 다음 예제와 같아야합니다.

[Unit]
StartLimitBurst=5
StartLimitIntervalSec=33

[Service]
Restart=always
RestartSec=5
ExecStart=/bin/sleep 6

이렇게하면 30 초 (5 * 6)에 5 번 다시 시작하고 33 초에 1 번 다시 시작합니다. 따라서 33 초에 6 번의 재시작이 있습니다. 33 초 안에 5 번의 재시작 횟수를 초과했습니다. 따라서 재시작은 약 31 초 후에 5 카운트에서 중지됩니다.


답변

OnFailure실패하면 다른 서비스를 시작하도록 설정할 수 있습니다 . 에서 온 실패 서비스 는 대기하는 스크립트를 실행 한 다음 서비스를 다시 시작 할 수 있습니다.

이를 설정하는 방법에 대한 샘플은 장치 장애시 시스템 상태 메일을 참조 하고 대신 서비스를 다시 시작하도록 수정하십시오.


답변

사용할 수 있습니다 StartLimitAction=reboot. StartLimitInterval 후에 시스템이 재부팅됩니다.

StartLimitAction = StartLimitInterval = 및 StartLimitBurst =로 구성된 속도 제한에 도달 한 경우 수행 할 조치를 구성하십시오. none, reboot, reboot-force 또는 reboot-immediate 중 하나를 사용합니다. 아무 것도 설정하지 않으면 속도 제한에 도달하면 시작이 허용되지 않는 것 외에는 아무 작업도 트리거되지 않습니다. reboot는 정상적인 종료 절차에 따라 재부팅합니다 (즉, systemctl reboot와 동일). reboot-force는 강제 재부팅으로 모든 프로세스를 강제로 종료하지만 재부팅시 더티 파일 시스템이 발생하지 않아야합니다 (즉, systemctl reboot -f와 동일). reboot-immediate는 즉시 reboot (2) 시스템 호출을 실행하여 결과적으로 발생할 수 있습니다. 데이터 손실. 기본값은 none입니다.