Использовать вывод оболочки для обработки ошибок для кондора

Мне нужно отправить несколько симуляций в condor (мультиклиентскую сетку выполнения) с помощью оболочки, и, поскольку это может занять некоторое время, я решил написать сценарий оболочки, чтобы сделать это за меня. Я очень новичок в написании сценариев оболочки, и это результат того, что я сделал за один день:

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 не сломается). По прошествии 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>

Это означает, что время от времени теряется целая итерация! Как я могу обойти это? Единственный способ, который я вижу, - это использовать оболочку для чтения последних строк вывода терминала и оценить, соответствуют ли они ожидаемому ответу, т.е.:

7392 job(s) submitted to cluster CLUSTER_NUMBER.

Но как мне прочитать последнюю строку и проверить на наличие ошибок?

Любая помощь очень нужна и очень ценится


person Max Z.    schedule 11.03.2013    source источник


Ответы (1)


Дает ли condor_submit ненулевой код выхода в случае сбоя? Если это так, вы можете попробовать вызвать его следующим образом:

while ! condor_submit profile.sub; do
    sleep 5
done

что приведет к тому, что текущий профиль будет отправляться каждые 5 секунд, пока он не будет успешным.

person chepner    schedule 11.03.2013
comment
Это выглядит очень многообещающе! И вроде работает! Спасибо за быстрый ответ :) - person Max Z.; 11.03.2013