2016-10-06 4 views
1

몇 가지 종속성이있는 일련의 SGE 그리드 작업을 능률화하는 딜레마가 있지만 -hold_jid을 지정하는 올바른 방법을 찾지 못했습니다.SGE 그리드 작업 종속성

생각에는 우리 같은 직업을 가지고 :

job1: qsub -N job1 ... 
job2: qsub -N job2 -hold_jid job1 
job3: qsub -N job3 -hold_jid job2 

다음 실행 순서가 job1-> job2-> job3이 보장된다. 이 경우

job2a: qsub -N job2a.${timestamp_of_submission} 

, 내가 job2a 완료 후 확인 job3 실행을 만들 수있는 방법을 생각하지 않은 :

그러나, 복잡한 작업 2 내 가정, 임베디드 SGE 작업이, job2a 말.

attempt1 :

qsub -N job3 -hold_jid job2 ... 

그리고 반드시 job3 대기 작업 2 완료는, 그러나, job3은 내가 원하는 것을 인 job2a 후에 실행된다는 보장이 없을 때까지.

attempt2 :

qsub -N job3 -hold_jid job2a* ... 

는 job3는 작업 2가 실행 시작할 때까지 job2a이 작업 배열에 표시되지 않기 때문에 바로 실행 것으로 보인다. 참고 submit의 타임 스탬프가 미리 추측하기 어렵 기 때문에 job2a의 정확한 이름을 지정하지 않으려면 위의 *을 사용했습니다.

누구나 job1-> job2-> job2a-> job3으로 종속성 체인을 달성 할 수있는 방법을 알고 있습니까? 감사합니다. 또한 작동합니다 작업 ID를 캡처, 또는

qsub -N job2 
qsub -N job2a 
qsub -N job3 -hold_jid job2,job2a.${timestamp_of_submission} 

:

답변

0

당신이 -hold_jid 작업 ID의 목록을 제공하는 시도 가지고

job2a=$(qsub -N job2a.${timestamp_of_submission} | perl -p -e "s/Your job (\d+) .*/\1/g;") 
qsub -N job3 -hold_jid job2,${job2a} 

편집

의견을 바탕으로

, 당신은 직업 ID의 목록을 얻을 필요가있다.

그래서 나는 다음과 같은 제안 :

작업 2에 대한

job2list=$(qsub -N job2 | perl -p -e "s/Your job (\d+) .*/\1/g;") 

위의 저장 작업 ID를 그런 다음 당신이 job2a 형 작업을 제출할 때마다 수행

job2a=$(qsub -N job2a.${timestamp_of_submission} | perl -p -e "s/Your job (\d+) .*/\1/g;") 
job2list="${job2list},${job2a}" 

위 코드는 job2a id를 job2의 id에 추가합니다.

할 작업 (3)를 제출하면 준비 :

qsub -N job3 -hold_jid ${job2list} 
+0

감사하지만 나를 위해 작동하지 않았다 : 내 경우, 나는, -hold_jid 작업 2를 시도 job2a * 참 job2a 여러 하위 작업이 있기 때문에 , 모두 같은 접두사 'job2a'. 런타임에 job3은 job2가 완료되기를 기다렸지 만 어떤 job2a * 작업도 완료 될 때까지 기다리지 않았습니다. – galactica

+0

명확히하기 위해 모든 job2a 작업 ID를'-hold_jid' 옵션에 추가 했습니까, 아니면 와일드 카드 ('*')를 사용 했습니까? – Vince

+0

모든 작업 이름을 즉석에서 열거 할 수 없기 때문에 와일드 카드를 사용했습니다. 즉, 제출 타임 스탬프 목록 – galactica