2009-11-23 2 views
2

SGE를 사용하여 Rocks 클러스터에서 실행중인 일부 기존 과학 코드가 있습니다. qsub 스크립트 (즉, Sun Grid Engine이 소요되고 실행하는 스크립트)를 생성하는 응용 프로그램 별 작업 제출 스크립트가 있습니다.SGE 작업 내의 클러스터에서 티를 사용하여 SIGTERM 문제 해결

qsub 스크립트 내에서 기존 앱이 호출됩니다. 이 응용 프로그램은 출력을 STDOUT으로 보냅니다. SGE는 STDOUT을 가로 챈 다음이를 사용자 홈 디렉토리의 파일에 스풀링하므로 사용자는 결과를 실시간으로 볼 수 있습니다. 이 동작을 유지하기를 원하지만 동시에 모든 출력을 백그라운드에서 투명하게 기록하고 싶습니다. 나는 이것을 달성하기 위해 티가 완벽 할 것이라고 생각했다.

그래서 작업 제출 스크립트를 수정하여 응용 프로그램을 실행하고 STDOUT을 tee로 파이프하면 STDOUT이 작업 완료 후 중앙 저장소에 복사되는 파일에 저장됩니다. 응용 프로그램은 실행하고 다음과 같이 티 파이프됩니다 :

\$GMSCOMMAND | tee \$SCRATCHDIR/gamess_output.log 

문제는 내가 여러 노드를 요청할 특히, 나는 앱이 SIGTERMs으로 죽어되었습니다 티하기 위해 코드를 배관을 시작한 때부터이다. 나는 티와 함께 ​​-i (인터럽트 무시) 매개 변수를 사용해 보았습니다. 아무런 차이가 없습니다.

앱 출력을 파일로 리디렉션 한 다음 앱이 완료되면 파일에 cat하면 문제가 없지만 사용자가 실시간으로 결과를 볼 수 있도록 허용 할 수 없습니다 (중요한 요구 사항 임).

이 티의 사용에 실패한 이유에 대한 아이디어가 있으십니까? 또는 원하는 기능을 어떻게 달성 할 수 있을지에 대한 아이디어가 있습니까?

+0

'tee' 명령을'cat'으로 바꾸어서 문제가되는 파이프인지 알아볼 수 있습니까? –

+0

SIGPIPE가 아닌 SIGTERM입니까? strace -o tr.gms. $ SGE_JOBID를 넣어 시스템 호출과 신호를 추적하십시오. 어쩌면 $ GMSCOMMAND와 tee를 모두 추적 할 수 있습니다. –

답변

1

특별한 경우가 실패하는 이유에 대해 알지 못하지만, 하나의 옵션으로 $GMSCOMMAND이 자체 로깅을 수행하는 것일 수 있습니다. (효과적으로 티를 앱 안에 넣으십시오). 이 옵션은 레거시 앱을 변경하는 비용에 달려 있다고 생각합니다.

리디렉션/복제를 수행하기 위해 자신의 스크립트/응용 프로그램으로 '기존 앱'을 래핑 할 수 없다는 점에 실패했습니다.

+0

감사합니다. Douglas, 기존 앱을 수정할 수 있다면 좋겠지 만 정책의 문제로는이 작업을 수행 할 수 없습니다. – tramdas

+1

자,'tee' 명령을'cat'으로 대체 해보십시오 - 이것이 문제가되는 파이프인지 알아볼 수 있습니까? –

+0

사실,'| cat'도 같은 방식으로 실패합니다'| 티가 그렇기 때문에 파이프가 문제가되는 것처럼 보입니다. 이 점을 염두에두고 필자는'$ GMSCOMMAND> $ outputfile'을 detached로 실행하고 EOF까지 $ outputfile을 STDOUT으로 스트리밍하는 것에 대해 궁금해하기 시작했습니다. 하지만 시도하기 전에 Sun Grid Engine 설명서를 검토하여 관련 설정 정보가 있는지 실제로 확인해야합니다. 다른 도움이 있다면 지금까지 도와 줘서 고마워. 나는 모든 귀가있어. ... – tramdas

0

파이프가 문제가 있다면 프로세스 교체로 'while/read'루프를 사용하여 문제를 해결할 수 있습니다. 이 방법이 효과가 있습니까?

while read line; do 
    echo "$line" 
    echo "$line" >> ${SCRATCHDIR}/gamess_output.log 
done <(${GMSCOMMAND})