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 depend=afterok:$job대신 -W를 사용해 보았습니다.-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.

무엇이 잘못 될 수 있습니까? 🙁



답변

qsub의 출력은 메시지 텍스트 내에 작업 ID를 갖습니다. 나의 경우에는:

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

이 메시지에서 작업 ID를 추출해야합니다. 예 :

$ 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

이렇게하면 번호가 1, 2, 3 인 3 개의 작업이 한 번에 하나씩 실행됩니다 ( -tc 1). 더 이상 걱정할 필요가 없습니다 hold_jid.

SGE_TASK_ID현재 작업의 정수 ID가 유지되는 위치입니다. 이것은 코드에 전달하는 것입니다 ( i루프 와 동일 ).