2012-04-10 5 views
9

작업을 제출하기 전에 .pbs 스크립트에 매개 변수를 직접 전달하는 방법이 있습니까? 다른 번호로 표시된 파일 목록을 반복하고 각 파일을 분석하기 위해 스크립트를 적용해야합니다. pass_test.pbs직접 매개 변수를 pbs 스크립트에 전달하십시오.

#!/bin/sh 

for ((i= 1; i<= 10; i++)) 
do 
     export FILENUM=$i 
     qsub pass_test.pbs 
done 

는 다음 스크립트입니다 :

#!/bin/sh 

#PBS -V 
#PBS -S /bin/sh 
#PBS -N pass_test 
#PBS -l nodes=1:ppn=1,walltime=00:02:00 
#PBS -M [email protected] 

cd /scratch/XXXXXX/pass_test 

./run_test $FILENUM 

그러나이 조금 남았습니다 느낌

내가 가지고 올 수 있었던 가장

는 다음과 같습니다. 특히이를 처리하기 위해 환경 변수를 작성하지 않아도됩니다.

답변

8

사용하여 여기에 당신이 즉석에서 스크립트를 생성 할 수 있습니다 문서화 있도록 qsub 유틸리티는, 표준 입력에서 스크립트를 읽을 수 동적으로 : 개인적으로

#!/bin/sh 

for i in `seq 1 10` 
do 
    cat <<EOS | qsub - 
#!/bin/sh 

#PBS -V 
#PBS -S /bin/sh 
#PBS -N pass_test 
#PBS -l nodes=1:ppn=1,walltime=00:02:00 
#PBS -M [email protected] 

cd /scratch/XXXXXX/pass_test 

./run_test $i 
EOS 
done 

, 나는 더 컴팩트 버전을 사용하는 것 : 작업 배열이있는 것처럼

#!/bin/sh 

for i in `seq 1 10` 
do 
    cat <<EOS | qsub -V -S /bin/sh -N pass_test -l nodes=1:ppn=1,walltime=00:02:00 -M [email protected] - 
cd /scratch/XXXXXX/pass_test 
./run_test $i 
EOS 
done 
0

그냥 번호를 전달하고 입력 파일 번호를 제외하고 같은 명령을 사용하여 작업 목록을 실행해야하는 경우 for 루프 대신 작업 배열을 사용하는 것이 좋습니다 작업 스케쥴러에 대한 부담을 덜어줍니다.

qsub -t 1-10 pass_test.pbs 

지정할 수 여기서, 유형을

./run_test ${PBS_ARRAYID} 

을 그리고 명령 줄에서 그것을 호출 : 실행하려면

, 당신은 PBS 파일에 다음과 같이 PBS_ARRAYID으로 파일 번호를 지정 -t 옵션 뒤에 사용할 배열 ID는

입니다.
관련 문제