Bash 通过命令行参数在脚本中设置PBS/Torque/qsub参数
我希望能够通过脚本轻松更改提交给Bash 通过命令行参数在脚本中设置PBS/Torque/qsub参数,bash,pbs,qsub,torque,Bash,Pbs,Qsub,Torque,我希望能够通过脚本轻松更改提交给qsub的节点数、ppn等。也就是说,我想做这样的事情: 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} /
qsub
的节点数
、ppn
等。也就是说,我想做这样的事情:
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
qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00 -v ARGS1=2
但是提交的作业的名称为script.sh
和1节点
,1ppn
有什么解决方案吗?在Torque中,当在命令行上指定匹配参数时,所有的#PBS参数都将被覆盖。例如,如果您的脚本具有:
#PBS-l节点=2
您可以提交:
qsub script.sh-l节点=4
命令行将优先于脚本。文档中有许多命令行参数。@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
这些都可以通过参数设置为qsub
本身:
qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00
然后,需要传递到可执行文件的任何参数都可以通过-v
参数传递到qsub
:
qsub script.sh -v NAME=test_job,NODES=16,PPN=16,ARG1=2
qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00 -v ARGS1=2