Как правильно передать переменную среды в Sun Grid Engine?

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

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


person englebip    schedule 15.03.2012    source источник
comment
qsub -N "test_env" -cwd -v="$i" run.sh должно работать нормально.   -  person Simon O'Hanlon    schedule 13.08.2015


Ответы (3)


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

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

и скрипт run.sh:

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

когда я вызываю send.sh, .o имеет вывод 10.

person Jorge Leitao    schedule 23.01.2013
comment
Спасибо. Это требует наименьшего количества дополнительного ввода и работает, даже если сценарий .sh затем вызывает другую программу (проверено с помощью R). - person Ari B. Friedman; 04.05.2014

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

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

person Mathew Hall    schedule 15.03.2012

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

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