シェルを使用して複数のシミュレーションをコンドル (マルチクライアント実行グリッド) に送信する必要があります。これには時間がかかる場合があるため、シェル スクリプトを作成して実行することにしました。私はシェルスクリプトに非常に慣れていません。これは、ある日に行った結果です。
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.
しかし、最後の行を読み込んでエラーをチェックするにはどうすればよいでしょうか。
どんな助けも非常に必要であり、非常に感謝しています