qsub -hold_jid -afterok цикл не запускается

Я пытаюсь выполнить серию заданий, переданных в кластер, одно за другим, используя следующий сценарий.sh:

Annotation_Loop.sh:

#!/bin/bash

job=`qsub run_IntersectBed_1.sh 0`
for i in {1..3}
do
    job_next=`qsub -hold_jid $job run_IntersectBed_1.sh $i`
    job=$job_next
done

Первая задача (до входа в цикл) выполняется, но следующие никогда не запускаются.

Я думаю, что сценарий хорошо написан. Я изменяю режим на исполняемый файл и запускаю его как

nohup ./Annotation_Loop.sh (Я думаю, что это необходимо?) ... но остальное никогда не делается.

Я пробовал -W раньше, используя -W depend=afterok:$job на месте -hold_jid $job

#!/bin/bash

    job=`qsub run_IntersectBed_1.sh 0`
    for i in {1..3}
    do
        job_next=`qsub -W depend=afterok:$job run_IntersectBed_1.sh $i`
        job=$job_next
    done

Но это вернулось unknown option -W,

Что может быть не так?:(

2 ответа

Решение

Выход qsub имеет идентификатор задания внутри текста сообщения. В моем случае:

$ qsub hello.sh
Your job 8845476 ("hello.sh") has been submitted

Вы должны извлечь jobid из этого сообщения. Например:

$ jobid=$(qsub hello.sh | cut -d' ' -f3)
$ echo $jobid
8845481

Возможно, ваша версия qsub имеет другое сообщение, попробуйте ее отдельно, а затем добавьте вырез, чтобы получить jobid в виде строки.

Для тех, кто наткнулся на это спустя годы:

Я бы использовал для этого задачу массива, чтобы избежать написания сценария оболочки. Вам нужно что-то вроде run_IntersectBed_1.sh $SGE_TASK_ID и нужно отправить с qsub -t 1-3 -tc 1 Annotation_Loop.sh

Это создает массив из 3 заданий, пронумерованных 1, 2 и 3, которые запускаются по одному (-tc 1). Вам больше не нужно беспокоиться о hold_jid,

SGE_TASK_ID где находится целочисленный идентификатор текущей работы. Это то, что вы передаете в свой код (эквивалент i в вашем цикле).

Другие вопросы по тегам