直接将参数传递给pbs脚本

时间:2012-04-10 18:12:14

标签: bash unix pbs qsub

有没有办法在提交作业之前直接将参数传递给.pbs脚本?我需要遍历由不同数字指示的文件列表,并应用脚本来分析每个文件。

我能想出的最好成绩如下:

#!/bin/sh 

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

其中pass_test.pbs是以下脚本:

#!/bin/sh

#PBS -V
#PBS -S /bin/sh
#PBS -N pass_test
#PBS -l nodes=1:ppn=1,walltime=00:02:00
#PBS -M XXXXXX@XXX.edu

cd /scratch/XXXXXX/pass_test

./run_test $FILENUM

但这感觉有点不稳定。特别是,我想避免创建一个环境变量来处理这个问题。

3 个答案:

答案 0 :(得分:9)

qsub实用程序可以从标准输入中读取脚本,因此通过使用here文档,您可以动态创建脚本,动态

#!/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 XXXXXX@XXX.edu

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 XXXXXX@XXX.edu -
cd /scratch/XXXXXX/pass_test
./run_test $i
EOS
done

答案 1 :(得分:1)

您可以使用here中所述的-F选项:

-F

指定启动脚本时将传递给作业脚本的参数。可接受的语法是:

qsub -F "myarg1 myarg2 myarg3=myarg3value" myscript2.sh

注:引号是必需的。 qsub将失败并显示错误 如果-F之后的参数不是带引号的值,则显示此消息。的 pbs_mom服务器将把引用的值作为参数传递给作业 脚本启动脚本时。

另请参阅this answer

答案 2 :(得分:0)

如果您只需要传递数字并使用与输入文件编号相同的命令运行作业列表,则最好使用作业数组而不是for循环,因为作业数组会减少作业调度程序的负担。

要运行,请在pbs文件中使用PBS_ARRAYID指定文件编号:

./run_test ${PBS_ARRAYID}

要在命令行上调用它,请键入:

qsub -t 1-10 pass_test.pbs

您可以在-t选项

之后指定要使用的数组ID