Как правильно передать переменную окружения в Sun Grid Engine? - PullRequest
4 голосов
/ 15 марта 2012

Я пытаюсь отправить (серию) заданий в 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 в качестве первого. Это выглядит не очень практично, но это было бы решением.

Будет ли лучшее решение?

Ответы [ 3 ]

7 голосов
/ 23 января 2013

Я всегда делал следующее:

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

и скрипт запускаются .sh:

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

, когда я вызываю send.sh.выход 10.

1 голос
/ 22 февраля 2013

Я не уверен, что вы можете передавать переменные по их имени через qsub.У меня был успех с передачей значений (вы, вероятно, должны написать сценарий для этого вместо того, чтобы делать это в интерактивном режиме):

$ export ii=19
$ qsub -N "test_env" -cwd -v i=$ii run.sh
1 голос
/ 15 марта 2012

Предполагая, что ваша переменная является просто увеличивающимся счетчиком: вы можете использовать Array Jobs для достижения этой цели. Это установит переменную окружения $SGE_TASK_ID на счетчик, который затем можно скопировать в $i или использовать напрямую.

Если переменная является чем-то еще, то я думаю, что вам придется сгенерировать несколько сценариев заданий и отправить каждый; это «решение», которое я использую, когда у меня есть множество заданий с разными параметрами.

...