私は現在、Supervisordを使用して同時に実行される100のスクリプトインスタンスを保持しています。一つが死ぬと、新しいものが始まります。
しかし、より多くの数(300以上のプロセス)を維持するのは難しいと思われるので、代替案を探しています。 Monitは、単一のスクリプトを監視し、同じスクリプトの100のインスタンスを簡単に監視できないという点で、私が望むことを実行していないようです。
利用可能なさまざまなツールの提案がありますか?
答え1
あなたはそれを使用することができます:
ps h --ppid $$ | wc -l
Bashスクリプトから子プロセスの数を取得します(ここにpsが含まれていることに注意してください)。したがって、1000のプロセスが必要な場合は、1001が返されることを確認してください。それ以外の場合は、次のコマンドを使用して起動します。
cmd &
現在のスクリプトの子として実行されます(したがってカウントに含まれます)。その後、しばらく寝て、ループで永久に再確認することができます。 1つの注意点は、他のプロセスを作成するには、目的のps
プロセスをフィルタリングするようにコマンドを変更する必要があることです。
最初のコマンドはパズルの重要な部分であり、スクリプトを作成する前に追加の内容が必要です。
答え2
pgrep|wc -l
単純なシェルスクリプトで同様のものを使いましょう。各スキャンの間に約1秒待ちます(必要に応じてLinuxでは短く待つことができます)sleep
。
答え3
スクリプトが終了してシェルに戻ると、インスタンスごとにラッパースクリプトを使用できます。
while [ 1 == 1 ] ; do /path/to/script ; done
または、スクリプトを分岐するラッパーを作成し、それを使用して死んだwait/waitpid
プロセスをキャッチします。