SystemdのStartLimitIntervalSecおよびStartLimitBurstが機能しない


12

(コンテナー内の)サービスの再起動数を制限しようとしました。OSのバージョンはcentos-release-7-5で、サービスファイルは次のようになります(読みやすいように一部のパラメーターを削除しました)。他のいくつかの投稿が指摘しているように、これはかなり単純なはずです(Post of Server Faultの再起動制限1、Post of Stack Overflowの再起動制限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

2
これは、回答に示されているように、「Sec」と入力し忘れるよりも重要です。必要な詳細を多く尋ねられたこのような質問を閉じることは役に立たないと思います。
sourcejedi 2018

回答:


21

StartLimitIntervalSec=systemd v230の一部として追加されました。systemd v229以前では、のみを使用できますStartLimitInterval=。また、配置する必要がありますStartLimitInterval=し、StartLimitBurst=[Service]はない-セクション[Unit]セクション。

CentOSでsystemdのバージョンを確認するには、を実行しrpm -q systemdます。

systemd v230以上にアップグレードした場合でも、[Service]セクションの古い名前は引き続き機能します。

ソース:https : //lists.freedesktop.org/archives/systemd-devel/2017-July/039255.html

systemdは不明なディレクティブを無視するため、エラーがまったく発生せずにこの問題が発生することがあります。systemdは、多くの新しいディレクティブが無視されてもサービスの実行を許可すると想定しています。

不明なディレクティブがないかユニットファイルを手動でチェックすることができます。少なくとも最近のsystemdでは動作するようです:

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

それは面白い。StartLimitBurst[Service]セクションに配置することをお勧めしますが、ドキュメントには[Unit]セクションに配置する必要があると記載されています。freedesktop.org/software/systemd/man/systemd.unit.html StartLimitIntervalSec=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.
Ikrom

1
@Ikrom In systemd v229以下
sourcejedi 2018年

@sourcejediありがとう!私のcentos 7でsystemdをチェックしたところ、/usr/lib/systemd/systemd --versionv219でした。systemdバージョンの世話をする必要があります。
Ikrom 2018年

できれば+10。私は以前にこの解決策を何回か探しました(そして明らかにグーグルで苦手でした)。私にとっても新しいですsystemd-analyze。ありがとうございました!
JCotton

systemd-analyze既にインストールされていないローカルファイルではなく、既にインストールされているサービスファイルに対してのみ機能するようです。(少なくとも、これは私のv219を使用しようとした場合にそうであるようです。)それが本当なら、この回答で言及する価値があるかもしれません。
mhucka

5

私は問題を見つけたと思います。オンラインのすべてのドキュメントは、これらのすべてのパラメーターがUNITファイル(systemd unit file)にあることを示唆していますが、私のシステム(centos 7.5)でも、それらはサービスファイルにあります。名前は「StartLimitIntervalSec」ではなく「StartLimitInterval」です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.