4

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

但是,我找不到让 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=19在开头添加一行run.sh,则输出为:

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

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

会有更好的解决方案吗?

4

3 回答 3

7

我一直在做的事情如下:

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

和脚本run.sh:

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

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

于 2013-01-23T13:30:00.760 回答
1

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

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

于 2012-03-15T16:18:19.810 回答
1

我不确定您是否可以通过 qsub 按名称传递变量。我在传递值方面取得了成功(您可能应该为此编写一个前端脚本,而不是交互地执行它):

$ export ii=19
$ qsub -N "test_env" -cwd -v i=$ii run.sh
于 2013-02-21T22:19:28.557 回答