1

特定のソフトウェアのライセンスを7つ持っています。したがって、7つのジョブを同時に開始したいと思います。'&'を使用してそれを行うことができます。ここで、「wait」コマンドは、これら7つのプロセスすべてが終了するまで待機して、次の7つを生成します。次に、最初の7つを開始した後、ジョブが完了すると、シェルスクリプトを記述します。別のことを始めたいと思います。これは、これらの7つのジョブの一部は非常に時間がかかる可能性があり、他の一部は非常に迅速に完了するためです。それらがすべて終了するのを待つのに時間を無駄にしたくありません。Linuxでこれを行う方法はありますか?手伝っていただけませんか?

ありがとう。

4

4 に答える 4

5

GNUparallelは行くべき道です。これは、同じコマンドの複数のインスタンスを起動するように設計されており、それぞれがstdinまたは外部ファイルから取得した異なる引数を使用します。

ライセンスされたスクリプトが呼び出されmyScript、各インスタンスが同じオプションを持ち、生成された各インスタンス--arg1 --arg2の変数パラメーターを取り--argVariable、それらのパラメーターが file に保存されているとしますmyParameters

cat myParameters | parallel -halt 1 --jobs 7 ./myScript --arg1 --argVariable {} --arg2

説明:

  • -halt 1parallel1 つのジョブが失敗した場合、すべてのジョブを停止するように指示します
  • --jobs 7の7つのインスタンスを起動しますmyScript

paralleldebian ベースの Linux システムでは、次を使用してインストールできます。

sudo apt-get install parallel

おまけとして、ライセンスで許可されている場合は、parallelこれらの 7 つのインスタンスを複数のコンピューターで起動するように指示することもできます。

于 2012-11-23T22:35:08.253 に答える
1

現在実行中の数を確認し、7未満の場合はさらに開始できます。

while true; do
    if [ "`ps ax -o comm | grep process-name | wc -l`" -lt 7 ]; then
        process-name &
    fi
    sleep 1
done
于 2012-11-23T22:08:21.097 に答える
0

2つのスクリプトを記述します。終了するたびにジョブを再開するものと、最初のスクリプトの7回開始するもの。

好き:

script1:

./script2 job1
...
./script2 job7

script2:

while(...)
  ./jobX
于 2012-11-23T22:07:47.397 に答える