如何将环境变量正确传递给Sun Grid Engine?

时间:2012-03-15 12:07:15

标签: bash sungridengine

我正在尝试向SGE提交一系列(一系列)工作(FWIW,它是Gromacs分子动力学模拟的一系列),其中所有工作都是相同的,除了后缀,例如input01input02等等。我编写的命令以后缀由命令序列正确处理的方式运行。

但是,我找不到让exec环境接收该变量的方法。根据{{​​1}}手册页,qsub应该这样做。

-v var

然后,我提交以下脚本($ export i=19 $ export | grep ' i=' declare -x i="19" $ env | grep '^i=' i=19 )以查看是否已收到:

run.sh

我按如下方式提交作业(与上面的if [ "x" == "x$i" ]; then echo "ERROR: \$i not set" else echo "SUCCESS: \$i is set" fi 命令在同一会话中):

export

错误流为空,输出流包含:

$ qsub -N "test_env" -cwd -v i run.sh
Your job 4606 ("test_env") has been submitted

我也尝试了以下命令,但未成功:

$ cat test_env.o4606 
ERROR: $i not set

如果我在$ qsub -N "test_env" -cwd -v i -V run.sh $ qsub -N "test_env" -cwd -V run.sh $ qsub -N "test_env" -cwd -v i=19 -V run.sh $ qsub -N "test_env" -cwd -v i=19 run.sh 的开头添加一行i=19,则输出为:

run.sh

我现在正在考虑为每个作业生成一个文件,这个文件基本上是相同的,但第一行会有$ cat test_env.o4613 SUCCESS: $i is set as 19 行。它看起来不太实用,但它将是一个解决方案。

会有更好的解决方案吗?

3 个答案:

答案 0 :(得分:7)

我一直在做的事情如下:

##send.sh
export a=10
qsub ./run.sh

和脚本run.sh:

##run.sh
#$ -V
echo $a

当我调用send.sh时,.o的输出为10.

答案 1 :(得分:1)

假设您的变量只是一个递增计数器:您可以使用Array Jobs来实现此目的。这会将$SGE_TASK_ID环境变量设置为计数,然后您可以将其复制到$i或直接使用。

如果变量是其他任何东西,那么我认为你必须生成多个作业脚本并提交每个;这是我在有大量具有不同参数的作业时使用的“解决方案”。

答案 2 :(得分:1)

我不确定您是否可以通过qsub按名称传递变量。我已经成功传递了值(你应该为此编写一个前端脚本,而不是以交互方式进行):

$ export ii=19
$ qsub -N "test_env" -cwd -v i=$ii run.sh