我需要使用 shell 向 condor(多客户端执行网格)提交多个模拟,因为这可能需要一段时间,所以我决定编写一个 shell 脚本来为我做这件事。我对 shell 脚本非常陌生,这是我一天所做的结果:
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 个不同的参数提交给生成 condor 提交配置文件的程序。然后我提交此配置文件并让它执行 15 分钟(每分钟进行一次调用以确保 SSH 管道不会中断)。一旦 15 分钟结束,我将输出压缩到具有更多空间的卷并擦除原始文件。
我实施这个的原因是因为我们的 condor 系统一次只能处理多达 10,000 个提交,而一个提交 ( 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>
这意味着不时会丢失整个迭代!我该如何解决这个问题?我看到的唯一方法是使用 shell 读取终端输出的最后一行并评估它们是否遵循预期的响应,即:
7392 job(s) submitted to cluster CLUSTER_NUMBER.
但是我将如何阅读最后一行并检查错误?
非常需要任何帮助,非常感谢