2012-03-15 78 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 
相關問題