Отправить массив заданий SGE со случайными именами файлов - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть скрипт, который запускает ~ 200 заданий для каждого суб-анализа.Я понял, что массив работ, вероятно, будет намного лучше для этого по нескольким причинам.Это кажется достаточно простым, но не совсем для меня.Мои входные файлы не нумеруются, поэтому я привел следующие примеры, которые я видел, я делаю это сначала:

INFILE=`sed -n ${SGE_TASK_ID}p <pathto/listOfFiles.txt`

Моя команда qsub принимает довольно много переменных, поскольку она одновременно извлекает и выводит в разные каталоги.$ res не изменяется, однако $ INFILE - это то, через что я зацикливаюсь.

qsub -q test.q -t 1-200 -V -sync y -wd ${res} -b y perl -I /master/lib/ myanalysis.pl -c ${res}/${INFILE}/configFile-${INFILE}.txt -o ${res}/${INFILE}/

Поскольку это не сработало, мне было любопытно, что именно было передано.Таким образом, я повторил это и увидел, что он расширяется только при первом использовании $ INFILE.Поэтому я получаю:

perl -I /master/lib/ myanalysis.pl -c mydirectory/fileABC/

вместо:

perl -I /master/lib/ myanalysis.pl -c mydirectory/fileABC/configFile-fileABC.txt -o mydirectory/fileABC/

Надеюсь на некоторую ясность в этом и приветствую все предложения.Заранее спасибо!

ОБНОВЛЕНИЕ: Не похоже, что $ SGE_TASK_ID установлен в кластере.Я искал любую переменную, которая могла бы использоваться для идентификатора массива, и не смог ничего найти.Если я увижу что-нибудь еще, я обновлюсь снова.

1 Ответ

0 голосов
/ 24 сентября 2018

Если вы используете вариант механизма сетки, тогда в задании должен быть установлен SGE_TASK_ID.Похоже, что вы ожидаете, что он будет установлен в некоторую полезную переменную, прежде чем использовать qsub.Отправка сценария, подобного этому, будет примерно соответствовать тому, что вы пытаетесь сделать: #!/bin/bash INFILE=$(sed -n ${SGE_TASK_ID}p <pathto/listOfFiles.txt) exec perl -I /master/lib/ myanalysis.pl -c ${res}/${INFILE}/configFile-${INFILE}.txt -o ${res}/${INFILE}/

Затем отправьте этот сценарий с

res=${res} qsub -q test.q -t 1-200 -V -sync y -wd ${res} myscript.sh

`

...