2012-03-15 81 views
4

我试图向SGE(FWIW,它是Gromacs分子动力学模拟序列)提交(一系列)作业,其中所有作业除了后缀之外都是相同的,例如input01,input02等。编写命令以后缀由命令序列正确处理的方式运行。如何正确地将环境变量传递给Sun Grid Engine?

但是,我找不到让exec环境接收该变量的方法。根据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=19run.sh开始,那么输出是:

$ cat test_env.o4613 
SUCCESS: $i is set as 19 

现在我正在考虑产生每个作业的单个文件,基本上是相同的,但将有一个i=xx行作为第一个。它看起来不太实际,但它会是一个解决方案。

会有更好的解决方案吗?

+0

'的qsub -N“test_env” -cwd -v =“$ I”运行.sh'应该可以正常工作。 – 2015-08-13 18:31:50

回答

1

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

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

6

我一直总是在做的是以下几点:

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

和脚本run.sh:

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

当我打电话send.sh中,具有的.o的输出10.

+0

谢谢。这涉及最少的额外输入,并且即使当.sh脚本然后调用另一个程序(用R测试)时也可以工作。 – 2014-05-04 12:58:12

1

我不确定你可以通过他们的名字通过qsub传递变量。我已经与传球成功值(你应该写一个前端脚本这个,而不是交互做):

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