実行中のプログラムのインスタンスを100個維持する


12

現在、supervisordを使用して、一度に実行されるスクリプトの100個のインスタンスを維持しています。ダイがあれば、新しいダイが起動します。

しかし、より多くの数(300以上のプロセス)を維持するのに苦労しているようで、代替品を探しています。Monitは、個々のスクリプトを監視し、同じスクリプトの100個のインスタンスを簡単に監視できないため、私が望んでいることを実行していないようです。

私が使用できる別のツールに関する提案はありますか?


これらのスクリプトは何をしており、なぜ複数のインスタンスが必要なのですか?それらは異なる引数/環境で実行されていますか?
-psusi

1
単純なbashスクリプトは機能しますか?何か...実行中のスクリプトプロセスの数を数えます。100未満の場合、不足している数を開始しますか?
ガベ。

3
何を達成しようとしていますか?300のプロセスの一部が死んでいるのはなぜですか?おそらく、タスクを達成するためのより良い方法があります。少なくとも、実行中のスクリプトの299インスタンスが300未満である場合、アプリケーションアーキテクチャに欠陥があります。なぜ死んだのかを理解せずに死んだプロセスを再起動すると、しばしば別の死に至り、結果としてかなりのオーバーヘッドが発生します。
msw

ここでは、URLの処理を行っているレガシーシステムで作業しており、各システムには独自のスレッド(PHPで記述されている)が必要です。はい、アーキテクチャには欠陥がありますが、それでも作業する必要があります...現時点で新しいものに取り組んでいます:)
jong

回答:


1

次を使用できます。

ps h --ppid $$ | wc -l

bashスクリプトから子プロセスの数を取得します(psを含むことを忘れないでください)。したがって、1000個のプロセスが必要な場合は、1001が返されるかどうかを確認します。

cmd &

そのため、現在のスクリプトの子として実行されます(したがって、カウントに含まれます)。その後、少しの間スリープし、ループ内で永久に再度チェックインできます。留意すべきことの1つは、他のプロセスを生成する場合、psコマンドを変更して必要なプロセスをフィルタリングする必要があることです。

その最初のコマンドはパズルの中核部分であり、スクリプトを作成するまではもう少し必要です。


0

pgrep|wc -l単純なシェルスクリプトで、またはそのようなものを使用します。を使用して各チェックの間に1秒(またはLinuxの場合はそれ以下)待機しsleepます。


0

スクリプトが停止し、シェルに戻るだけの場合、各インスタンスにラッパースクリプトを使用できます。

while [ 1 == 1 ] ; do /path/to/script ; done

または、スクリプトを分岐し、wait/waitpidデッドプロセスをキャッチするために使用するラッパーを作成します。


1
スクリプトに何らかの端末常時障害状態(スライスがいっぱい、設定ファイルを読み取れないなど)がある場合に備えて、少なくとも最後にスリープ状態になります。 CPUのスライス用。さらに-100 *(bashプロセス+失敗したアプリの初期起動フットプリント)==自明ではない可能性のあるRAM)
シンセサイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.