다음 .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
루프 와 동일 ).