0

シェルを使用して複数のシミュレーションをコンドル (マルチクライアント実行グリッド) に送信する必要があります。これには時間がかかる場合があるため、シェル スクリプトを作成して実行することにしました。私はシェルスクリプトに非常に慣れていません。これは、ある日に行った結果です。

for H in {0..50}
do
    for S in {0..10}
    do
        ./p32 -data ../data.txt -out ../result -position $S -group $H
        echo "> Ready to submit"
        condor_submit profile.sub
        echo "> Waiting 15 minutes for group $H Pos $S"
        for W in {1..15}
        do
            echo "Staring minute $W"
            sleep 60
        done
    done

    echo "Deleting data_3 to free up space"
    mkdir /tmp/data_3
    if [$H < 10]
        then
            tar cfvz /tmp/data_3/group_000$H.tar.gz ../result/data_3/group_000$H
            rm -r ../result/data_3/group_000$H
        else
            tar cfvz /tmp/data_3/group_00$H.tar.gz ../result/data_3/group_00$H
            rm -r ../result/data_3/group_00$H
    fi
done

このスクリプトは 0..50 回のシミュレーションを実行し、0..10 個の異なるパラメーターをコンドル送信プロファイルを生成するプログラムに送信します。次に、このプロファイルを送信し、15 分間実行します (SSH パイプが切断されないように、1 分ごとに呼び出しが行われます)。15 分が経過したら、出力をより多くのスペースのあるボリュームに圧縮し、元のファイルを消去します。

これを実装する理由は、コンドル システムが一度に最大 10,000 件の送信しか処理できず、1 件の送信 ( condor_submit profile.sub) で 7000 以上のシミュレーションを実行できるためです。

今、私の問題はこの行にあります。今朝確認したところ、(幸いなことに)condor_submit profile.subネットワークがビジー状態の場合に呼び出し時にエラーが発生する可能性があることに気付きました。エラーコードは次のとおりです。

ERROR: Failed to connect to local queue manager
CEDAR:6001:Failed to connect to <IP_NUMBER:PORT_NUMBER>

これは、繰り返し全体が時々失われることを意味します! どうすればこれを回避できますか? 私が見る唯一の方法は、シェルを使用して端末出力の最後の行を読み取り、それらが期待される応答に従うかどうかを評価することです。

7392 job(s) submitted to cluster CLUSTER_NUMBER.

しかし、最後の行を読み込んでエラーをチェックするにはどうすればよいでしょうか。

どんな助けも非常に必要であり、非常に感謝しています

4

1 に答える 1

0

condor_submit失敗したときにゼロ以外の終了コードを返しますか? その場合は、次のように呼び出してみてください。

while ! condor_submit profile.sub; do
    sleep 5
done

これにより、現在のプロファイルが成功するまで 5 秒ごとに送信されます。

于 2013-03-11T16:13:36.803 に答える