Есть ли способ собрать код завершения задания, запущенного bsub?
Например: есть скрипт test.sh (test.sh содержит несколько двоичных файлов, которые запускаются один за другим), запускаемый bsub.
std::string cmdLine = "bsub test.sh";
File *fp = popen(cmdLine.c_str());
int retcode = pclose(fp); // this returns exit code of bsub (not wanted in this scenario)
Я ищу способ получить коды выхода двоичных файлов, запущенных bsub?
Спасибо!
LSF — это система пакетного планирования, поэтому ваше взаимодействие с ней как с клиентом асинхронно:
Чтобы узнать состояние фактической рабочей нагрузки, я могу дать вам несколько вариантов.
Опция 1
сила bsub
действовать синхронно. Это, вероятно, самый простой вариант, учитывая текущее состояние примера кода: в основном, все, что вам нужно сделать, это дать bsub
-K
вариант. Это приводит к тому, что команда по существу не возвращается до тех пор, пока задание не будет поставлено в очередь, отправлено и завершено, а затем команда вернет код завершения задания так, как вы хотите:
std::string cmdLine = "bsub -K test.sh"; // Use -K option
File *fp = popen(cmdLine.c_str());
int retcode = pclose(fp); // this will now return the exit code of test.sh
Вариант 2
Некоторые сайты не любят позволять пользователям использовать -K
вариант по разным причинам. Если это так, то вам нужно запросить у системы статус вашей работы, используя bjobs
команда.
В основном после bsub
возвращается, ваш код будет просто неоднократно вызывать bjobs
команда и анализ выходных данных, чтобы определить состояние выхода вашей работы. Например:
$ bjobs -o 'stat exit_code' 6308
STAT EXIT_CODE
DONE -
Дает мне столбцы для состояния выхода и код выхода для идентификатора задания 6308 (идентификатор задания получается путем анализа вывода bsub
при подаче работы):
DONE
Ваша работа успешно выполненаEXIT
тогда ваша работа закончилась ненормально, и вы можете получить код выхода из столбца EXIT_CODERUN
или же PEND
то ваша работа выполняется или ожидает отправки соответственно, ваш код должен sleep()
ненадолго и попробую позвонить bjobs
снова.Обратите внимание, что пример bjobs
выход выше использует -o
возможность настроить вывод для легкого разбора. Это относительно новая функция, если вы используете старую версию LSF, вам придется обходиться без нее — выполнимо, но немного сложнее.
Других решений пока нет …