[1]のホスティングにアクセスする以外にアクセスできないリモートマシンでsshdを強制終了することができたので(マシンで使用可能なすべてのメモリを使用するスクリプトを実行することで、おっと...)、確実にする方法を検討していました。そのsshdは常に実行され続けます。
N分または時間ごとにsshdを再起動するハッキーなcronジョブを除いて、inittabを使用してinitを取得し、sshdを実行し続けることは良い考えのようです。
このアプローチには欠点がありますか? sshdがマシンにアクセスできる唯一の方法であることが多いため、Linuxディストリビューションがデフォルトで実行するのが賢明なことのように思われます。
さらに、このアプローチを使用する必要がある他のデーモンはありますか?おそらく、nagiosのnrpeなどの監視エージェントですか?
[1]はい、管理カードまたはネットワーク電源スイッチは良い考えですが、当時は「不要」と見なされていました...
アップグレード後にsshdを再起動する方が少し不便である以外に、inittabを実行する理由は他にありませんnot。
それ以外:面白いアイデア。
linux OOM killerにsshdを強制終了しないように指示するか、詳細についてはgoogle for oom_adjを参照するか、ここを参照してください rhel manual
常に実行されていることを保証するスキームの下で信頼できる必要があるサービスを持つことには利点があります。ここに記載されている理由から、私はdaemontoolsを使用することを好みます: http://cr.yp.to/daemontools/faq/create.html
私はこの方法でsshを実行していませんが、現在のSSH管理が機能しないと思った状況にあった場合は、十分に実行できれば幸いです。 「メモリ不足」の問題に関しては、sshdなどの特定のプロセスの優先順位を下げて、実際に問題を引き起こしているプログラムを優先してOOMキラーによって強制終了されないようにすることができます。
面白いアイデア。
私はそのようなことは何も試していませんが、ブートプロセスのどの時点でinittabからのものが開始されるかを確認します。早すぎる場合は、ネットワークが実行されていない可能性があります。
Monit は、ここで実行したいことだけを目的として設計された監視デーモンです。
私が予測できる唯一の問題は、構成エラーでリスポーンしようとしたかどうかです。
レート制限のリスポーンは可能だと思いましたが、これをサポートするドキュメントが見つからないようです。
他の人が私の前に述べたように、daemontoolsやmonitのような既存のツールを使用することがおそらく最も賢いルートでしょう。 inittabを使用してsshdを生成し、バックグラウンドにフォークすることはできません。initは複数のsshdを実行しようとします。ほとんどの場合、「init:再生成が速すぎます」というメッセージが表示されます。
ループで実行され、元のsshd(セッションを処理するための接続とフォークを受け入れるもの)がまだ実行されていることを確認する小さな監視スクリプトを作成することをお勧めします。失敗した場合は、システムのinitスクリプトを使用して再実行してください。
注意点として、sshdがカーネルのOOMハンドラーによって強制終了された場合、sshdが再起動後も存続する保証はありません...