как получить статус завершенных или прерванных заданий в qsub/torque

Используя крутящий момент, если я запускаю задание с qsub с определенными аргументами, задание завершается и происходят три вещи. 1) Я получаю файл file.eXXXX, содержащий стандартный вывод процесса 2) Я получаю файл file.oXXXX, содержащий стандартный вывод процесса 3) Я получаю электронное письмо с такой информацией, как распределение и статус выхода.

Я хотел бы иметь эту информацию о статусе в файле рядом с файлами .oXXXX и .eXXXX, потому что слишком сложно сопоставить сотни электронных писем с сотнями выходных файлов задания, особенно несколько дней спустя. Я не могу найти такую ​​встроенную возможность. Тем не менее, я заметил, что могу использовать «qstat -f job-id», чтобы получить информацию, очень похожую на ту, что находится в электронном письме. Но я не вижу в документации, как долго мне разрешена задержка для запуска qstat.

Я думал о том, что после запуска задания A с помощью qsub после этого используйте идентификатор задания для запуска зависимого задания B (qsub -W depend=...), которое будет запускать «qstat -f» идентификатора A, сообщая id-A через переменную окружения. Однако я не знаю, как далеко в будущем продлится задание B. Кроме того, если задание B выполняется не на том же узле, что и A, сможет ли qstat найти правильную информацию?

Моя идея кажется запутанной. Нет ли более простого/лучшего способа сделать это?

Я не думаю, что это можно сделать, установив какой-то монитор электронной почты, потому что я читаю свою электронную почту на совершенно другой машине, у которой нет доступа к вычислительному кластеру.


person Jim Newton    schedule 30.03.2018    source источник
comment
Если вам просто нужно знать, завершилось ли задание нормально или нет, вы можете добавить echo Success в конец сценария задания и проверить наличие этой строки в файле .oXXXXXX.   -  person Dmitri Chubarov    schedule 31.03.2018
comment
Да, конечно, я могу проверить выходной файл, чтобы выяснить, успешно ли он завершился, но было бы неплохо сопоставить информацию в электронном письме с фактическим результатом задания, например с ресурсами. Было бы неплохо проверить, сколько времени было использовано, а не сколько было запрошено. То есть в электронной почте (на узле чтения электронной почты) есть потенциально полезная информация, которую нельзя легко сопоставить с выходными файлами на вычислительном узле.   -  person Jim Newton    schedule 03.04.2018
comment
По завершении задания, пока оно еще выполняется, выходные данные qstat -f уже содержат информацию в параметрах resources_used. Вполне вероятно, что что-то вроде qstat -f $PBS_JOBID | grep resources_used должно работать при выполнении в качестве последней строки сценария задания.   -  person Dmitri Chubarov    schedule 03.04.2018
comment
Хорошая идея, Дмитрий. Это частично решает проблему. Я могу получить вывод qstat -f $PBS_JOBID, найти строку с префиксом Output_Path =, чтобы получить имя выходного файла (предупреждение о первых строках развёртки, потому что qstat -f раздражает перенос длинных строк) и заменить расширение .oXXXX на . sXXXX, а затем сбросить вывод qstat -f в этот файл. Это позаботится о случае успешного завершения задания. Однако это не поможет, если задание не завершится успешно. В этом случае я все еще получаю только некоррелированное электронное письмо.   -  person Jim Newton    schedule 04.04.2018


Ответы (1)


Чтобы обработать случай получения вывода даже в случае сбоя задания, включите что-то вроде этого в начало пакетного сценария после преамбулы PBS:

trap "qstat -f $PBS_JOBID | grep resources_used" EXIT

Это гарантирует, что всякий раз, когда скрипт завершает работу по какой-либо причине, скриптлет в кавычках выполняется. Поскольку PBS уничтожает вашу работу с помощью сигнала SIGTERM и прибегает к SIGKILL только в том случае, если ваш сценарий не завершается в ответ на первый, вы всегда должны иметь возможность выполнить эту ловушку. Это также означает, что вы можете удалить команду qstat в конце скрипта; ловушка будет поражена и там.

sh, bash и производные поддерживают trap, а csh и производные — нет.

person Charles    schedule 03.10.2018
comment
Привет, Чарльз, просто чтобы уточнить ваш ответ, в какой оболочке, по вашему мнению, находится скрипт? Я думаю, вы каким-то образом принимаете конкретную оболочку и настраиваете обработчик сигналов в синтаксисе этой оболочки, верно? - person Jim Newton; 04.10.2018
comment
Привет, Джим, sh, bash и ksh поддерживают встроенную ловушку, а csh и производные - нет. Спасибо, что поймали; Я обновил свой ответ. - person Charles; 05.10.2018