0

仕事のグリッドでいくつかのシミュレーションを実行する必要がありますが、1つずつしか実行できません(そうしないと、グリッドによって仕事の優先度が低くなります)。したがって、1つのジョブを実行する必要があり、それが完了したことを確認した後、新しいジョブを送信します。

ジョブを送信するには、実行する必要があります

run -file test.cfg

それが行われたかどうかを確認するには、次のコマンドを実行する必要があります。

run -status test.cfg

仕事が終わったかどうかを示すメッセージを受け取ります。ステータスを確認して完了したら、ジョブを実行したいと思います。

ありがとう!!

4

2 に答える 2

1

たぶん、これらの行に沿ったスクリプトが機能するでしょう:

#!/bin/bash

declare -a jobs=(task1.cfg task2.cfg task3.cfg);

for job in ${jobs[@]}; do
    # Start job
    run -file $job;
    # Wait for job to complete
    while [ "$(run -status $job)" != "COMPLETE" ]; do
            if [ "$(run -status $job)" == "FAILED" ]; then
                echo "Job $job failed" >&2;
                exit -1;
            fi;
            sleep 10m;
    done;
done;

ここでは、実行するタスクのリストを定義し、各タスクをループして、ジョブを開始し、完了するまで待ってから次のタスクに進みます。実行中のタスクのステータスを10分ごとにチェックします。ジョブが失敗した場合に終了するために、エラーチェックを実行します。上記は完全にはテストされていないことに注意してください。

于 2012-11-08T11:07:45.163 に答える
1

最も簡単な方法は次のとおりです。

run -file test.cfg ; run -status test.cfg

これにより、最初のコマンドが終了した後に2番目のコマンドが実行されます。これは、いかなる種類の成功もチェックしません。

より良い方法は、前のコマンドが正常なリターンコードで返されたかどうかを確認することです(つまり$?=0

run -file test.cfg && run -status test.cfg

この例&&では、「最初に0で戻った(つまり成功した)場合にのみ2番目のコマンドを実行する」という意味です。

最後に、最初のコマンドが失敗した場合に意味のあるメッセージが必要な場合は、次のようにします。

run -file test.cfg && run -status test.cfg || echo "first command execution failed"

上記は、「最初のコマンドを実行&&し、成功した場合は2番目のコマンドを実行し、それ以外の場合は(||)エコーエラーメッセージを意味します。

于 2012-11-08T18:37:19.767 に答える