it-swarm.com.de

StartdimitIntervalSec und StartLimitBurst von Systemd funktionieren nie

Ich habe versucht, die Anzahl der Neustarts eines Dienstes (in einem Container) einzuschränken. Die Betriebssystemversion ist centos-release-7-5, die Servicedatei ist so ziemlich wie unten (einige Parameter wurden entfernt, um das Lesen zu vereinfachen). Es sollte ziemlich einfach sein, wie einige andere Beiträge betonten (Neustartlimit 1 für Post of Server-Fehler, Limit 2 für Neustart nach Stapelüberlauf). StartLimitBurst und StartLimitIntervalSec funktionieren jedoch nie für mich.

Ich habe auf verschiedene Arten getestet: (1) Ich überprüfe die Dienst-PID und beende den Dienst mehrmals mit "kill -9 ****". Der Dienst wird immer nach 20s neu gestartet! (2) Ich habe auch versucht, die Servicedatei durcheinander zu bringen, damit der Container nie läuft. Trotzdem funktioniert es nicht, die Servicedatei wird immer wieder neu gestartet.

Irgendeine Idee?

[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
11
batilei

StartLimitIntervalSec= Wurde als Teil von systemd v230 hinzugefügt. In systemd v229 und niedriger können Sie nur StartLimitInterval= Verwenden. Sie müssen auch StartLimitInterval= Und StartLimitBurst= In den Abschnitt [Service] Einfügen - nicht in den Abschnitt [Unit].

Führen Sie rpm -q systemd Aus, um Ihre systemd-Version unter CentOS zu überprüfen.

Wenn Sie jemals auf systemd v230 oder höher aktualisieren, funktionieren die alten Namen im Abschnitt [Service] Weiter.

Quelle: https://lists.freedesktop.org/archives/systemd-devel/2017-July/039255.html

Sie können dieses Problem haben, ohne dass ein Fehler auftritt, da systemd unbekannte Anweisungen ignoriert. systemd geht davon aus, dass viele neuere Anweisungen ignoriert werden können und der Dienst dennoch ausgeführt werden kann.

Es ist möglich, eine Einheitendatei manuell auf unbekannte Anweisungen zu überprüfen. Zumindest scheint es auf neueren systemd zu funktionieren:

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

Ich glaube, ich habe das Problem gefunden. Alle Online-Dokumente schlagen vor, dass sich alle Parameter in der UNIT-Datei befinden ( systemd unit file ), aber immer noch in meinem System (centos 7.5) in der Servicedatei. Außerdem lautet der Name "StartLimitInterval", nicht "StartLimitIntervalSec".

5
batilei