使用shell输出进行秃鹰的错误处理

问题描述:

我需要使用shell提交多个嘲讽(多客户端执行网格),因为这可能需要一段时间,所以我决定编写一个shell脚本来为我做。我很新的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分钟后,我将输出压缩到更多空间并清除原始文件。

我之所以实现这个目标,是因为我们的秃鹰系统一次只能处理多达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在终端输出的最后一行/ s的读取和评估他们是否遵循预期的响应,即:

7392 job(s) submitted to cluster CLUSTER_NUMBER. 

但我怎么会在最后一行阅读并去检查错误?

任何帮助是非常需要和非常赞赏

是否condor_submit给非零退出代码时,它失败了呢?如果是的话,你可以尝试调用它像这样:

while ! condor_submit profile.sub; do 
    sleep 5 
done 

这将导致当前配置文件,直到成功为止每5秒钟提交。

+0

这看起来很有希望!而且似乎工作!感谢您的快速回复 :) – 2013-03-11 16:28:49