4

현재 "페이로드"프로그램의 수천 개의 인스턴스를 실행하고 출력의 일부 후 처리를 수행하는 드라이버 프로그램이 있습니다. 현재 드라이버는 복수 스레드에서 shell() 함수를 사용하여 페이로드 프로그램을 직접 호출합니다. shell() 함수는 현재 작업 디렉토리에서 명령을 실행하고 명령 실행이 끝날 때까지 블록하여 명령에 의해 stdout으로 전송 된 데이터를 반환합니다. 이것은 단일 멀티 코어 시스템에서 잘 작동합니다. 대신 병렬 처리를 위해 큰 계산 클러스터에 qsub 작업을 제출하도록 드라이버를 수정하고 싶습니다.작업이 완료 될 때까지 qsub 블록을 만드시겠습니까?

qsub 명령이 파일 대신 stdout에 결과를 출력하고 작업이 끝날 때까지 차단하는 방법이 있습니까? 기본적으로 가능한 한 명령의 "정상적인"실행과 같은 역할을하므로 드라이버 프로그램을 최대한 수정하지 않고 클러스터와 병렬 처리 할 수 ​​있습니다.

편집 : 모든 그리드 엔진이 꽤 표준화되었다고 생각합니다. 그들이 중요하지 않다면, 나는 토크를 사용하고 있습니다.

답변

3

사용중인 대기열 시스템에 대해서는 언급하지 않지만 SGE는 qsub에 대한 '-sync y'옵션을 지원하므로 작업이 완료되거나 종료 될 때까지 차단됩니다.

2

TORQUE에서는 -x 및 -I 옵션을 사용하여 수행됩니다. qsub -I는 ​​대화식이어야하며 -x는 지정된 명령 만 실행하도록 지정합니다. 예 :

qsub -I -x myscript.sh 

myscript.sh가 실행을 완료 할 때까지 반환되지 않습니다.

+0

출력을 출력 파일에 저장할 수 없습니까? –

+1

이 방법으로 출력을 자동으로 저장하지 못했지만 터미널 세션을 기록하고 출력을 그런 식으로 저장할 수 있습니다. – dbeer

0

PBS에서 사용할 수 있습니다 qsub -Wblock=true <command>

관련 문제