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」です。

関連情報