関連: システム再起動バースト制限
私はカメラサービスを運営する商用製品を開発しています。このサービスは、システムが正常に動作するために重要です。これまでは素晴らしかったです。低レベルのプロトコル/ドライバの問題が原因でサービスが失敗した場合は、サービスを再起動できます。以下は、サービスの再起動と再起動ロジックを処理する.serviceユニットファイルの断片です。
...
[service]
Restart=on-failure
StartLimitInterval=2min
StartLimitBurst=5
StartLimitAction=reboot-force
...
場合によっては(バスエラーなど)、複数回再起動してもシステムの復元に役立たないことがあります。この場合、デバイスの再起動を中止して(ユーザーに不快感を与える可能性があるため)、カメラパイプラインを復元しようとするすべての試みを停止しようとします。これは、追加の再起動を停止する前にデバイスが実行する再起動の数を簡単に追跡する監視サービスを使用して達成できます。
別のオプションは、この目的のために別の監視サービスを追加するのではなく、systemdに依存することです(これは順番にsystemdによって監視されます)。私はシステムオプションを見つけてドキュメント/サンプルを読み、そのような再起動しきい値が存在することを確認するのに時間を費やしました。再起動回数を設定可能なStartLimitRebootに制限する方法を探しています。
長すぎます。
私はこのようなことを達成したい
...
[service]
...
...
...
StartLimitReboot=3 # stop rebooting after this limit
...
systemdはまだそのようなセマンティクスをサポートしていないようですが、サポートしていれば私の作業は大幅に単純化されます。
答え1
いいえ、systemd
複数の再起動を管理した後に再起動を停止する機能はありません。
アプリケーションが2回失敗し、2回再起動をトリガーし、2週間安定していることを確認し、さらに後でStartActionLimit
この方法で3回目の再起動をトリガーする状況を考えてみましょう。StartLimitReboot=3
この状況で理論が引き起こされると期待していますか?
そうでない場合は、「再起動カウンタ」が期限切れになるようにするタイムアウト値が必要です。これは、サービスが再起動される速度を測定するタイマーとは異なります。再起動タイマーは、サービスを再起動する前にコンピュータを起動するのにかかる時間を考慮する必要があるためです。
また、重大なサービスエラーのためにシステムがブートループに閉じ込められた場合、システムを維持するのは合理的ですか?存在する重要なサービスが機能しない場合はどうすればよいですか?それとも、後で放棄して電源を切る必要がありますか?
ここで役に立つことに興味があることがわかりますが、systemd
この機能がまもなく提供されるとは予想されません。