systemd サービスの手動再起動率を制限する

systemd サービスの手動再起動率を制限する

私のシステムでは、サービス (たとえば nginx) が 'systemd restart nginx' によって過剰に再起動されることがあります (他のスクリプトの結果として、たとえば新しい構成を適用したり、ログをローテーションしたりするため)。

この方法でサービスを「手動で」再起動する場合でも、systemd は再起動レート制限で失敗します。また、もちろん、特定の秒間に nginx を 10 回再起動しても役に立ちません。

では、サービスの手動再起動率を制限するにはどうすればよいでしょうか? 手動再起動要求にも適用される restart-cooldown のようなものはありますか? 通常の設定はすべて、systemd による自動再起動に適用されるようです。

答え1

StartLimitIntervalSecこれはとで実現できますStartLimitBurst

systemdユニットのマニュアルページより:

StartLimitIntervalSec=間隔、StartLimitBurst=バースト

ユニットの起動レート制限を構成します。間隔時間範囲内でバースト時間を超えて起動されたユニットは、それ以上起動できません。チェック間隔を構成するには StartLimitIntervalSec= を使用し、間隔ごとに許可される起動回数を構成するには StartLimitBurst= を使用します。

interval は、デフォルトの単位が秒である時間範囲ですが、他の単位を指定することもできます。systemd.time(5) を参照してください。デフォルトは、マネージャー設定ファイルの DefaultStartLimitIntervalSec= です。0 に設定すると、あらゆる種類のレート制限が無効になります。burst は数値で、マネージャー設定ファイルの DefaultStartLimitBurst= にデフォルト設定されます。

これらの設定オプションは、サービス設定 Restart= (systemd.service(5) を参照) と組み合わせると特に便利です。ただし、Restart= ロジックによってトリガーされる起動だけでなく、すべての種類の起動 (手動を含む) に適用されます。

Restart= に設定され、開始制限に達したユニットは、それ以上再起動は試行されないことに注意してください。ただし、間隔が経過した後、後で手動で再起動するか、タイマーまたはソケットから再起動することはできます。その時点から、再起動ロジックが再びアクティブになります。systemctl reset-failed により、サービスの再起動レート カウンターがフラッシュされます。これは、管理者がユニットを手動で開始したいが、開始制限がそれを妨げる場合に役立ちます。レート制限は、ユニット条件チェックが実行された後に強制されるため、条件に失敗したユニットのアクティブ化はレート制限にカウントされません。

答え2

使用しているオペレーティング システムのリリースは何ですか? nginx パッケージは、Linux ディストリビューションのリポジトリを使用してインストールされましたか、それともソース コードからインストールされましたか?

これらの質問に対する答えは、問題を解決するために必要な可能性のある方法を決定するのに役立つかもしれません。

関連情報