Код выхода задания, запущенного bsub

Есть ли способ собрать код завершения задания, запущенного 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?

Спасибо!

1

Решение

LSF — это система пакетного планирования, поэтому ваше взаимодействие с ней как с клиентом асинхронно:

  1. Вы отправляете свою работу для планирования, используя bsub, команду bsub
    немедленно возвращается
  2. Элемент списка в фоновом режиме, система расписаний и
    отправляет вашу работу

Чтобы узнать состояние фактической рабочей нагрузки, я могу дать вам несколько вариантов.

Опция 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_CODE
  • Если столбец состояния RUN или же PEND то ваша работа выполняется или ожидает отправки соответственно, ваш код должен sleep() ненадолго и попробую позвонить bjobs снова.

Обратите внимание, что пример bjobs выход выше использует -o возможность настроить вывод для легкого разбора. Это относительно новая функция, если вы используете старую версию LSF, вам придется обходиться без нее — выполнимо, но немного сложнее.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]