私はエラーが発生して停止する可能性のあるスクリプトを監視するためにsvscanを使用しています。スクリプトが終了すると、svscanはすぐにスクリプトを再起動しますが、すぐに終了します。だから、再起動し続けます。再試行回数など、svscanの設定や設定が見つからないようです。似ていることをご存知ですか?
答え1
もともと、ベルンシュタインデモントールには、そのためのメカニズムはありませんでした。サービスディレクトリには、単一のrun
プログラムと固定された自動再起動ポリシーがあります。ただし、daemontools ファミリーの複数のメンバーには、これを改善し、この状況を解決するために使用できる柔軟で一般的なメカニズムがあります。
- ゲレットペプのルネットそしてローラン・ベルコテのS6どちらもプログラムのメカニズムを提供します
finish
。 - Bruce Guenterのdaemontools-encoreプログラムのメカニズムを提供します
notify
。 - ウェイン・マーシャルの犯罪
rc.main
サブコマンドを使用してプログラムを呼び出すメカニズムがありますreset
。 - 私のスナックツールセットプログラムのメカニズムを提供します
restart
。
これはあなたの状況で使用できる一般的なメカニズムです。ここでは、noshサービス管理についてもう少し詳しく説明します。これが他の側面にどのように適用されるかは非常に明白です。
noshの自動再起動制御
nosh サービス管理では、daemontools-encore は同じ拡張 (Bernstein ソースに関して) サービス状態を使用します。停止、スタート、ここに行く、走る、失敗と止める。
サービス開始前とサービス状態のときスタート状態では、nosh サービス管理者がstart
プログラムを実行します。
サービスが終了してまだ「開始」状態にある場合、noshサービス管理者は次のようにrestart
プログラムを実行します。失敗再変換するかどうかを決定する状態走る国または止める(それから停止)状態。プログラムrestart
はサービス固有の方法でこれを決定し、ここでサービスが「あまりにも多く」再起動されたのか、それとも別の方法で再起動できなくなったのかを明示的に決定します。
restart
基本サービスプロセスがどのように終了したかに関する情報(正常終了、信号に応答して終了するか、終了コード、または特定の信号を含む)に関する情報をコマンドライン引数に渡します。サービス管理者が再度切り替えることを選択走るrestart
プログラムが正常に実行および終了し、次に切り替えることができるかどうかを示します。止める(したがって、停止) 他に指定されます。
restart
start
Perlプログラム、シェルスクリプト、execlineプログラム、コンパイルされたバイナリなど、必要なものは何でも構いません。case
...esac
とif
...を使用するシェルスクリプトの非常に簡単な練習ですfi
。 nosh-bundlesパッケージは、restart
使用可能なシェルスクリプトで書かれたプログラムのいくつかの例を提供します。Debian/Ubuntu で利用可能そしてFreeBSD/PC-BSD/DragonFlyBSD/&cに適用可能です。。
したがって、サービスが「あまりにも多く」再起動されたことを確認するには、start
プログラムにカウンタをゼロに初期化することができます(サービスディレクトリのファイルにあります)。プログラムは、restart
カウンタがオンリーに達した場合にのみカウンタをインクリメントします。成功ステータスが特定の値より小さい場合に返されます。もちろん、より多くの要素と他の要素を統合して決定を下すこともできます。
- サービスがクラッシュした場合、またはシグナルによって中断された場合は、自動再起動を停止し、完全にシャットダウンしたり、「クリーンシャットダウン」シグナル(たとえば)によって完全にシャットダウンした場合にのみ自動的に再起動したい場合があります
SIGTERM
。 - サービスが破損し(一部のサービス固有の方法で)、管理者の介入なしに正しく再起動できないことが検出された場合は、自動再起動を中止できます。
sleep
たとえば、計算期間に関連する一種の速度制限メカニズムを導入できます。
追加読書
- ジョナサンデボインポラード(2015)。デーモンツールシリーズ。一般的な答え。
- ジョナサン・デ・ボーインポラード。
service-manager
。 スナックガイド。これスナックガイド次のように利用可能Debian/Ubuntu パッケージそしてFreeBSD/PC-BSD/DragonFlyBSD/&c。パック、
service-manager
次の方法でインターネットに接続せずにコンピュータからアクセスできます。man service-manager
xdg-open /usr/local/share/doc/nosh/service-manager.html
- ブルースガンター。
supervise
。 daemontools-encore マニュアル。 §8。 - ゲレットパフ。
runsv
。ランブック。 §8。 - ウェイン・マーシャル(2013)。
perpetrate
。囚人のハンドブック。 §5。 - ローランベルコ。
s6-supervise
。 s6 マニュアル。