Systemd의 StartLimitIntervalSec 및 StartLimitBurst가 작동하지 않습니다.

Systemd의 StartLimitIntervalSec 및 StartLimitBurst가 작동하지 않습니다.

(컨테이너 내) 서비스가 다시 시작되는 횟수를 제한하려고 합니다. 운영 체제 버전은 이며 CentOs 7.5, 서비스 파일은 대략 다음과 같습니다. (읽기의 편의를 위해 일부 매개 변수가 삭제되었습니다.) 다른 게시물에서 지적했듯이 매우 간단해야 합니다(서버 오류 다시 시작 제한 1개 게시물, 스택 오버플로 다시 시작 제한 2개 게시물). 그러나 StartLimitBurst그것은 StartLimitIntervalSec나에게 결코 효과가 없었습니다.

여러 가지 방법을 테스트했습니다.

  1. 서비스 PID를 확인하고 kill -9 ****서비스를 여러 번 종료했습니다. 서비스는 항상 다음 이후에 다시 시작됩니다.20대!
  2. 또한 컨테이너가 절대 실행되지 않도록 서비스 파일을 조작해 보았습니다. 그래도 작동하지 않고 서비스 파일이 계속 다시 시작됩니다.

어떤 아이디어가 있나요?

[Unit]
Description=Hello Fluentd
After=docker.service
Requires=docker.service
StartLimitBurst=2
StartLimitIntervalSec=150s

[Service]
EnvironmentFile=/etc/environment
ExecStartPre=-/usr/bin/docker stop "fluentd"
ExecStartPre=-/usr/bin/docker rm -f "fluentd"
ExecStart=/usr/bin/docker run fluentd
ExecStop=/usr/bin/docker stop "fluentd"
Restart=always
RestartSec=20s
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

답변1

StartLimitIntervalSec=systemd v230의 일부로 추가되었습니다. systemd v229 이하 에서는 StartLimitInterval=.​StartLimitInterval=StartLimitBurst=[Service][Unit]

CentOS에서 시스템 버전을 확인하려면 를 실행하세요 rpm -q systemd.

systemd v230 이상으로 업그레이드하는 경우 이 섹션의 이전 이름이 [Service]계속 작동합니다.

인용하다:

systemd는 알 수 없는 명령을 무시하기 때문에 오류가 전혀 표시되지 않고 이 문제가 발생할 수 있습니다. systemd는 많은 새로운 지시문을 무시해도 여전히 서비스가 실행될 수 있다고 가정합니다.

알 수 없는 지침이 있는지 유닛 파일을 수동으로 확인할 수 있습니다. 적어도 최근 시스템에서는 작동하는 것 같습니다.

$ systemd-analyze verify foo.service
/etc/systemd/system/foo.service:9: Unknown lvalue 'FancyNewOption' in section 'Service'

답변2

문제를 발견한 것 같아요. 모든 온라인 문서에서는 모든 매개변수가 UNIT 파일(시스템 단위 파일), 하지만 여전히 내 시스템(centos 7.5)에서는 서비스 파일에 있습니다. 또한 이름은 "StartLimitIntervalSec"이 아니라 "StartLimitInterval"입니다.

관련 정보