Ich habe versucht, die Anzahl der Neustarts eines Dienstes (in einem Container) einzuschränken. Die Betriebssystemversion ist centos-release-7-5, die Servicedatei ist wie folgt (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
Antworten:
StartLimitIntervalSec=
wurde als Teil von systemd v230 hinzugefügt. In systemd v229 und niedriger können Sie nur verwendenStartLimitInterval=
. Sie müssen auchStartLimitInterval=
undStartLimitBurst=
in den[Service]
Abschnitt setzen - nicht den[Unit]
Abschnitt.Führen Sie aus, um Ihre systemd-Version unter CentOS zu überprüfen
rpm -q systemd
.Wenn Sie jemals ein Upgrade auf systemd v230 oder höher durchführen, funktionieren die alten Namen in diesem
[Service]
Abschnitt weiterhin.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:
quelle
StartLimitBurst
Abschnitt [Service] einzutragen, aber die Dokumentation besagt, dass er sich im Abschnitt [Unit] befinden sollte. freedesktop.org/software/systemd/man/systemd.unit.htmlStartLimitIntervalSec=interval, StartLimitBurst=burst Configure unit start rate limiting. Units which are started more than burst times within an interval time interval are not permitted to start any more.
/usr/lib/systemd/systemd --version
und es war v219. Ich muss auf die systemd-Version achten.systemd-analyze
. Vielen Dank!systemd-analyze
nur für bereits installierte Servicedateien funktioniert, nicht für eine lokale Datei, die Sie schreiben möchten, aber noch nicht installiert haben. (Zumindest scheint dies bei meinen Versuchen, es zu verwenden, auf Version 219 der Fall zu sein.) Wenn dies zutrifft, ist es möglicherweise wert, es in dieser Antwort zu erwähnen.Ich glaube, ich habe das Problem gefunden. Alle Online- Dokumente schlagen vor, dass sich alle Parameter in der UNIT-Datei ( systemd unit file ) befinden, aber immer noch in meinem System (centos 7.5) in der Servicedatei. Außerdem lautet der Name "StartLimitInterval", nicht "StartLimitIntervalSec".
quelle