web-dev-qa-db-ja.com

複数のスクリプトを実行し、すべてのスクリプトが完了するまで続行します

私の質問は、一度に複数のスクリプトを実行できますか? 32 CPUのクラスターにアクセスできますが、同時に900個のスクリプトがあります。ここで私がやりたいのは、すべてのスクリプトをキューに入れ、スクリプトが完了したら別のスクリプトを開始することです。すべて(またはほぼすべて)のCPUを並行して実行したいので、単純なループを実行しようとはしていません。

1
Lefix

GNU Parallelユーティリティ のようなものを探しているようです。説明からの抜粋は次のとおりです。

入力の各行に対してGNU parallelは、引数としてその行を使用してコマンドを実行します。コマンドが指定されていない場合、入力の行が実行されます。複数の行が並列に実行されます。

あなたの場合、次のようなもので32の同時スクリプトに制限します。

parallel -j32 ::: ./script1 ./script2 (...) ./script900

または、parallelにファイルからスクリプト名を読み取らせることも、すべての実行が同じスクリプトのインスタンスである場合は、パラメーターのみを入力ファイルに格納することもできます。考えられる多くのバリエーションについては、ドキュメントをお読みください。

2
dhag

次を使用してディレクトリ内のすべてのスクリプトをキックするとどうなりますか。

for FILE in *.sh; do ./$FILE & done;

そして、プロセススケジューラにそれを機能させます。

0
Lambert