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