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

1208
Carmen Sandoval

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

Annotation_Loop.sh:

#!/bin/bash  job=`qsub run_IntersectBed_1.sh 0` for i in  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  do job_next=`qsub -W depend=afterok:$job run_IntersectBed_1.sh $i` job=$job_next done 

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

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

2

2 ответа на вопрос

1
Zhen

Выход 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 в виде строки.

0
reseter

For anyone who stumbles across this years later:

I would use an array job for that to avoid writing a shell script. You need something like run_IntersectBed_1.sh $SGE_TASK_ID and need to submit with qsub -t 1-3 -tc 1 Annotation_Loop.sh

This creates an array of 3 jobs, numbered 1, 2 and 3, which run one at a time (-tc 1). You no longer need to worry about hold_jid.

SGE_TASK_ID is where the integer id of the current job is held. This is what you pass to your code (equivalent of i in your loop).