2017-02-17 48 views
2

我希望能够通过脚本轻松更改多少个nodes,ppn等提交给qsub。也就是说,我想运行的财产以后这样的:通过命令行参数在脚本中设置PBS /扭矩/ qsub参数

qsub script.sh --name=test_job --nodes=2 --ppn=2 --arg1=2 

有了这样的脚本如下:

#/bin/bash 
#PBS -N ${NAME} 
#PBS -l nodes=${NODES}:ppn=${PPN},walltime=${WALLTIME} 
#PBS -q ${QUEUE} 
#PBS -m ${MAILOPTS} 
#PBS -M ${EMAIL} 

/some/command ${ARG1} 

所以,我希望能够在这两个改变PBS环境以及参数传递就像一些可执行文件一样。

我使用的qsub-v论点尝试:

qsub script.sh -v NAME=test_job,NODES=16,PPN=16,ARG1=2 

但其名称为script.sh和1 node,1 ppn提交作业。

关于解决方案的任何想法?

回答

3

@ dbeer的回答给了我更多的见解。我的问题的解决方案如下:

#PBS args被命令行覆盖。在这种情况下,与PBS的脚本和脚本本身必须分开。因此,而不是试图做这样的事情:

#PBS -l nodes=${NODES}:ppn=${PPN},walltime=${WALLTIME} 

/some/command ${ARG1} 

里面的脚本和运行像

qsub script.sh -v NODES=2,PPN=2,WALLTIME=160:00:00,ARG1=2 

这些都可以用ARGS设置为qsub本身:

qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00 

然后,任何需要传递给可执行文件的参数都可以通过-v参数传递给qsub

qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00 -v ARGS1=2 
3

在转矩中,当在命令行中指定了匹配参数时,所有#PBS参数都将被覆盖。例如,如果你的脚本有:

#PBS -l nodes=2

您可以提交:

qsub script.sh -l nodes=4

和命令行会采取precendence在脚本。该文档具有命令行参数的complete list