私は現在、さまざまな方法で互いに依存する4つのプロセスで構成されたアプリケーションを維持しています。現在のプロセスは、次のような真珠を含むかなり「洗練された」bashスクリプトを介して起動、停止、および監視されます。
# And another rather dirty way to identify the node Api
# process by knowing the filename that is given to node.js.
# Keep in mind not to kill the retrieved process directly, but
# check the running user and the used port to make sure you
# actually got the correct process.
findApiProcessId() {
local pid=`ps ax | grep node | grep api/server\.js | cut -c -5`
if [ $pid ]
then
echo $pid
else
echo -1
fi
}
同様の方法で他のプロセスを確認してください。
これでこのプロセス管理を完全に再設計できますが、正直なところ、どこから始めるべきかわかりません。私が監視する必要があるプロセスは次のとおりです。
- lighttpdは「安定した」PIDファイルを管理します。
- mongodは信頼できないように見えるpidファイルを管理します。時には、まったく異なるプロセスに属するpidを指すこともあります。
- いくつかのpidファイルを保持しようとしたが悲惨に失敗するnode.jsインスタンス(nohupを使用して実行)が複数あります。
コマンドラインから個々のプロセスを開始および停止し、状態を照会できる必要があります。アプリケーションのさまざまな「グループ」に対して、さまざまなディレクトリでプログラムを複数回実行できる必要があります。子プロセスは、現在の作業ディレクトリの構成ファイルを確認し、実行中の他のインスタンスをブロックせずにそのポートを「選択」できます。
私の最初の考えは、PythonやCで単純なプロセスホストを書くことでしたが、これはやや過剰だと思います。だから既存のツールを探していましたが」Linuxプロセスホストツール「有益なものを開示しないでください。
それでは、複数のサブプロセスを監視できる「標準」プロセスホストツールはありますか?
ベストアンサー1
どうですか?runit
、「サービス監督によるUNIX初期化方式」?
あなたの要件を満たしていると思います。
- runitのサービス監督は、スーパーバイザプロセスによって自動的に実行されるように設計されたサービスデーモンへの依存関係を解決します。もっと)
- 実行中のサービスの確認は、次の方法で行うことができます。
sv status service
- すでにたくさんのことがありますサービス定義、使いやすく、独自のものを構築するための素晴らしいリソースです。
- さまざまなディストリビューション用にパッケージ化されており、非常に成熟しています(
lighttpd
Wikiページがありますrunit
、また見ることができますこれらの実行スクリプトには以下が含まれますlighttpd
。mongodb
) - さまざまなデーモンバリエーションに対応できます(例:node.jsはまったく問題を引き起こしません。)
答えられない「いくつかの変更されたサービス」巧妙な方法で問題を解決するには、もちろんサービスを個別に定義できます。 (いくつかのきれいなシンボリックリンクがある可能性があり、パスワードソリューションを確認することもできますが、ここで賢く努力するのが良いアイデアかどうかはわかりません。メンテナンス性)
編集する このArchWikiページ提供クイック概要おそらく、runit
このページより始めるのが良い場所でしょう。