параметр для сценариев оболочки, запускаемый с помощью qsub - PullRequest
41 голосов
/ 17 августа 2010

как я могу параметризовать сценарий оболочки, который выполняется в сетке (начался с qsub)? У меня есть сценарий оболочки, где я использую getopts для чтения параметров.

Когда я запускаю (qsub script.sh -r firstparam -s secondparam ..) этот рабочий скрипт с qsub, я получаю сообщения об ошибках,

qsub: неверный параметр - s

qsub: недопустимое значение -r

как считает qsub, параметр предназначен для себя. Пока я не нашел никакого решения.

Спасибо

Ответы [ 4 ]

44 голосов
/ 19 января 2011

Правильно использовать параметр qsub -v:

qsub -v par_name=par_value[,par_name=par_value...] script.sh

имя_парта можно использовать как переменную в сценарии оболочки.

35 голосов
/ 12 июня 2013

В дополнение к ответу volk, для ссылки на переменные в списке (обозначенные -v) вы просто используете имя, которое вы определили в своем вызове. Итак, скажем, вы позвонили в qsub следующим образом

qsub -v foo='qux' myRunScript.sh

Тогда myRunScript.sh может выглядеть примерно так:

#!/bin/bash
#PBS -l nodes=1:ppn=16,walltime=0:00:59
#PBS -l mem=62000mb
#PBS -m abe

bar=${foo}
echo "${bar}"

Где вывод будет

qux

Надеюсь, это поможет!

19 голосов
/ 01 сентября 2010

Я только что понял, как ее решить: просто напечатайте команды сценария оболочки с помощью echo и передайте результат в qsub:

echo "./script.sh var1=13 var2=24" | qsub

12 голосов
/ 20 сентября 2017

Есть лучший способ ...

Я действительно удивлен тем, как долго этот вопрос обходился без хорошего ответа.Возможно, конкретная версия qsub не указана.qsub существует как минимум в Torque, а также в Sun Grid Engine, возможно, в других планировщиках.Итак, важно знать, что вы используете.Я расскажу о некоторых из них здесь:

TORQUE: qsub -F <arguments> command

man page
Вот пример того, как я обычно его использую.Начиная с этого примера сценария, который просто повторяет любые передаваемые ему аргументы:

$ cat testArgs.pbs
#!/usr/bin/env bash

echo $@

Я бы отправил задание следующим образом:

$ qsub -F "--here are the --args" testArgs.pbs
3883919.pnap-mgt1.cm.cluster

И вот так выглядит выходной файл послеон запускается:

$ cat testArgs.pbs.o3883919
--here are the --args

Подсистема Sun Grid: qsub command [ command_args ]

Страница man
Вы просто добавляете аргументы после команды, так же, как если бывыполнение в оболочке.У меня нигде не работает SGE, так что нет примера для этого.Но то же самое со Slurm, который ниже

Slurm: sbatch command [ command_args ]

man page
Здесь я отправляю тот же скрипт, который использовал в примере Torqueвыше:

$ sbatch testArgs.sh what the heck
Submitted batch job 104331

И результаты:

$ cat slurm-104331.out
what the heck

Экспорт переменных среды! = передача аргументов

Экспорт переменных среды очень отличается от передачи аргументов в команду.
Вот хорошее обсуждение различий.

Ответы qsub выше всех рекомендуют -v.Чтобы быть понятным, -v экспортирует переменные среды, -F передает аргументы в команду.

Я обычно предпочитаю параметризовать свои сценарии, допуская аргументы.На самом деле, я бы сказал, что гораздо чаще использовать такие сценарии, как этот process_data.sh --threads 8, чем делать что-то вроде export THREADS=8; process_data.sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...