【问题标题】:Use shell output for error handling for condor使用 shell 输出对 condor 进行错误处理
【发布时间】:2013-03-11 15:38:19
【问题描述】:

我需要使用 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.

但是我将如何阅读最后一行并检查错误呢?

任何帮助都是非常需要并且非常感谢

【问题讨论】:

    标签: shell error-handling terminal condor


    【解决方案1】:

    condor_submit 失败时是否给出非零退出代码?如果是这样,您可以尝试这样调用它:

    while ! condor_submit profile.sub; do
        sleep 5
    done
    

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

    【讨论】:

    • 这看起来很有希望!并且似乎有效!感谢您的快速回复:)
    猜你喜欢
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    相关资源
    最近更新 更多