Мне нужно отправить несколько симуляций в 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.
Но как мне прочитать последнюю строку и проверить на наличие ошибок?
Любая помощь очень нужна и очень ценится