Как запустить задание массива в конвейере из нескольких задержанных заданий, когда количество подзаданий в массиве зависит от результата предыдущего задания

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

HOLD_ID=$(qsub JOB1.sh | cut -c 10-16)
HOLD_ID=$(qsub -hold_jid $HOLD_ID JOB2.sh | cut -c 10-16)
HOLD_ID=$(qsub -hold_jid $HOLD_ID JOB3.sh | cut -c 10-16)

Однако это отлично работает, теперь я хочу добавить в этот конвейер задание с удерживаемым массивом, например:

qsub -hold_jid $HOLD_ID -t 1-$NB_OF_SUBJOBS JOB4.sh

Но здесь количество подработок ($NB_OF_SUBJOBS), которые у меня будут, зависит от результата JOB2.sh.

Я хочу, чтобы это был быстрый мастер-скрипт, который просто отправляет все задания. Я не хотел бы немного поспать или что-то в этом роде, что было моей первой попыткой. Работа, от которой зависит нужный мне номер (JOB2.sh), относительно длительна по времени. Поскольку последняя строка оценивается при отправке, любая переменная или файл с количеством подзаданий, созданных предыдущим JOB2.sh, не будет работать. Любые идеи?

Большое спасибо,

Дэйвид


person DGMartin    schedule 14.12.2015    source источник


Ответы (1)


Итак, насколько я понимаю, отправка задания 4 зависит от получения информации о завершении задания 2. Если это так, очевидно, что вам нужно будет отправить задание 4. после завершения задания 2, которое отличается от отправки задания 4 и приостанавливает выполнение по завершении задания 2.

Почему бы не использовать параметр -sync -y для задания 2, чтобы отправка задания 4 происходила только после завершения задания 2:

qsub -hold_jid $HOLD_ID JOB2.sh -sync y

Убедитесь, что переменная n_subjobs вывода задания 2 находится где-то вроде файла (пример n_subjobs.txt ниже), или вы можете преобразовать вывод в переменную, как вы сделали для идентификатора задания. Затем прочитайте эту информацию при отправке задания 4:

qsub -t 1-$(cat n_subjobs.txt) JOB4.sh  
person Vince    schedule 15.12.2015