표준 작업은 제출하는 runscript를 만드는 것입니다. 이를 체인이라고합니다. 베어 본 bash는 예를 들어, 다음 스크립트가 /path/to/script.sh
했다 가정하고 JOB_ID가 특정 토크 설정을 참조하는 변수를 나타냅니다 (아마도 PBS_JOBID
?)
#!/bin/bash
#MSUB OPTIONS...
#(
#sleep 60 #for example
msub -l depend=${JOB_ID} /path/to/script.sh > /path/to/next_job.msub
#)&
[do hard work here: run your r script, etc.]
canceljob $(cat /path/to/next_job.msub)
여기서 핵심은을 제출 next_job
라인이다 종속성에 따라 현재 작업이 완료 될 때만 (죽거나 정상적으로 완료 되더라도) 새로운 작업이 실행됩니다. "근면"단계가 끝나면 후속 작업을 취소합니다. 그러나 "힘든 일"단계가 벽 시계 시간 (또는 다른 이유로)으로 중단되면 canceljob
명령에 도달하지 못하고 결국 제출 된 작업이 실행됩니다.
보통 괄호 안에 제출물을 감싸고 잠을 자고 &
(즉, 4, 5 및 7 번째 줄의 주석 처리를 제거합니다)을 사용하여 해당 프로세스를 기본 스크립트에서 분리합니다. 이렇게하면 "힘든 일"에 문제가 생기고 1 분 이내에 실패하면 프로세스가 종료되고 매우 짧고 실패한 작업이 무한대로 연결되지 않습니다.
백업 폴더를 모니터링하는 두 번째 경량 스크립트를 실행할 수 있습니다. 파일이 생성 된 것을 감지하면 백업을로드하고 스크립트를 다시 Torque/Moab 스케줄러에 다시 제출합니다. –
감사합니다. 그러나이 코드의 계산이 선형 적으로 진행되지 않기 때문에 백업 간격을 월 클럭 시간 제한에 매우 가깝게 설정할 수 없습니다. 그렇지 않으면 어떤 경우 백업없이 완료 할 수 있습니다. 사실, 나는 백업 간격을 한계의 0.1 정도로 설정했다. 또한 스크립트에서 서로 비동기 적으로 실행되는 여러 개의 병렬 프로세스가있어 스크립트가 더 복잡해집니다. – imriss
'python'에 대한'ruffus' 패키지를 확인해보십시오. R 세션을 관리하는 데 사용할 수 있습니다. https://code.google.com/p/ruffus/ –