Mar*_*tin 42 linux shell grid-computing qsub
如何参数化在网格上执行的shell脚本(以qsub开头)?我有一个shell脚本,我使用getopts来读取参数.
当我启动(qsub script.sh -r firstparam -s secondparam ..)这个带有qsub的工作脚本时,我收到错误消息,
qsub:无效选项 - s
qsub:非法-r值
正如qsub认为参数是为自己的.但我还没有找到任何解决方案.
谢谢
小智 44
使用qsub -v选项是正确的方法:
qsub -v par_name=par_value[,par_name=par_value...] script.sh
Run Code Online (Sandbox Code Playgroud)
par_name可以在shell脚本中用作变量.
jhr*_*hrf 35
除了volk的答案,为了引用列表中的变量(由-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}"
Run Code Online (Sandbox Code Playgroud)
输出的地方
qux
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
cal*_*co_ 12
如果没有一个好的答案,这个问题已经持续多久,我真的很惊讶.可能qsub是未指定特定版本.qsub至少存在于Torque和Sun Grid Engine中,可能还有其他调度程序.因此,了解您正在使用的内容非常重要.我在这里谈谈几个:
qsub -F <arguments> commandman page
这是我通常如何使用它的一个例子.从这个示例脚本开始,它只是回显传递给它的任何参数:
$ cat testArgs.pbs
#!/usr/bin/env bash
echo $@
Run Code Online (Sandbox Code Playgroud)
我会提交这样的工作:
$ qsub -F "--here are the --args" testArgs.pbs
3883919.pnap-mgt1.cm.cluster
Run Code Online (Sandbox Code Playgroud)
这就是输出文件运行后的样子:
$ cat testArgs.pbs.o3883919
--here are the --args
Run Code Online (Sandbox Code Playgroud)
qsub command [ command_args ]手册页
您只需在命令后添加参数,就像在shell中执行时一样.我没有在任何地方运行SGE,所以没有这个例子.但它与下面的Slurm相同
sbatch command [ command_args ]man page
在这里,我提交了与上面Torque示例中使用的相同的脚本:
$ sbatch testArgs.sh what the heck
Submitted batch job 104331
Run Code Online (Sandbox Code Playgroud)
结果如下:
$ cat slurm-104331.out
what the heck
Run Code Online (Sandbox Code Playgroud)
导出环境变量与将参数传递给命令有很大不同.
以下是对差异的良好讨论.
以上qsub答案都是推荐的-v.要清楚,-v导出环境变量,-F将参数传递给命令.
我通常更喜欢通过允许参数来参数化我的脚本.事实上,我会说使用这样的脚本process_data.sh --threads 8比做类似的事情更常见export THREADS=8; process_data.sh.