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
в вашем цикле).