用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