用qsub启动的shell脚本参数
我如何参数化一个在网格上执行的shell脚本(用qsub开始)? 我有一个shell脚本,我用getopts来读取参数。
当我启动(qsub脚本.sh -r firstparam -s secondparam ..)这个工作脚本与qsub我收到错误信息,
qsub:无效选项 – s
qsub:非法-r值
因为qsub认为参数本身。 但我还没有find任何解决办法。
谢谢
使用qsub -v选项是正确的方法:
qsub -v par_name=par_value[,par_name=par_value...] script.sh
par_name可以在shell脚本中用作variables。
除了volk的回答,为了引用列表中的variables(由-v指定),您只需使用您在调用中定义的名称。 所以,说你打电话给qsub如下
qsub -v foo='qux' myRunScript.sh
然后myRunScript.sh
可能看起来像这样:
#!/bin/bash #PBS -l nodes=1:ppn=16,walltime=0:00:59 #PBS -l mem=62000mb #PBS -m abe bar = ${foo} echo ${bar}
输出将在哪里
qux
希望这可以帮助!
我只是想出了如何解决它:只需用echo输出shell脚本的命令,并将结果输出到qsub:
echo "./script.sh var1=13 var2=24" | qsub
有一个更好的方法…
如果没有一个好的答案,这个问题已经走了多久,我真的很惊讶。 这可能是特定版本的qsub
没有指定。 qsub
至less存在于Torque中,也可以是Sun Grid Engine,也可能是其他的调度程序。 所以,知道你在使用什么是很重要的。 我会在这里谈一谈:
TORQUE: qsub -F <arguments> command
手册页
这是我通常如何使用它的一个例子。 从这个例子脚本开始,它只是回应传递给它的任何参数:
$ cat testArgs.pbs #!/usr/bin/env bash echo $@
我会提交这样的工作:
$ qsub -F "--here are the --args" testArgs.pbs 3883919.pnap-mgt1.cm.cluster
这是输出文件运行后的样子:
$ cat testArgs.pbs.o3883919 --here are the --args
Sun Grid Engine: qsub command [ command_args ]
手册页
您只需在命令后添加参数,就像在shell中执行一样。 我没有SGE在任何地方运行,所以没有这个例子。 但是Slurm也是如此,下面是这个
Slurm: sbatch command [ command_args ]
手册页
在这里,我提交了与上面的Torque示例相同的脚本:
$ sbatch testArgs.sh what the heck Submitted batch job 104331
结果是:
$ cat slurm-104331.out what the heck
导出环境variables!=传递参数
导出环境variables与将parameter passing给命令非常不同。
这里有一个很好的讨论的差异。
qsub
回答以上都推荐-v
。 要清楚, -v
导出环境variables, -F
将parameter passing给命令。
我通常喜欢通过允许参数来参数化我的脚本。 实际上,我会说使用像process_data.sh --threads 8
这样的脚本比使用export THREADS=8; process_data.sh
更常见export THREADS=8; process_data.sh
export THREADS=8; process_data.sh
。