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

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

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

qsub: неверная опция - s

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

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

Спасибо

4 ответа

Решение

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

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

Использование опции qsub -v является правильным способом:

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

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

В дополнение к ответу 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

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

Существует лучший способ...

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

TORQUE: qsub -F <arguments> command

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

$ 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

Двигатель Солнечной Решетки: qsub command [ command_args ]

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

Слерма: sbatch command [ command_args ]

справочная страница
Здесь я отправляю тот же скрипт, который я использовал с примером 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,

Другие вопросы по тегам