параметр для сценариев оболочки, который начинается с QSub
-
29-09-2019 - |
Вопрос
Как я могу параметризировать сценарий оболочки, который выполняется в сетке (начинается с QSUB)? У меня есть скрипт оболочки, где я использую Getopts для чтения параметров.
Когда я начинаю (QSub Script.SH -R FirstParam -S SecondParam ..) Этот рабочий сценарий с QSub я получаю сообщения об ошибках,
QSub: неверный вариант - s
QSUB: незаконное значение -r
Как считает QSUB, параметр для себя. И все же я не нашел никакого решения.
Спасибо
Решение 3
Я только что выяснил, как его решить: просто распечатайте команды сценария оболочки с помощью 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 может использоваться в качестве переменной в скрипте оболочки.
В дополнение к ответу Волка, чтобы ссылаться на переменные в списке (обозначенном -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
Существует как минимум в крутящем моменте, а также в Sun Grid Engine, возможно, другие планировщики. Итак, важно знать, что вы используете. Я расскажу о нескольких здесь:
Крутящий момент: 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, поэтому никакого примера для этого. Но то же самое с Slurm, который ниже
Slurm: sbatch command [ command_args ]
мужская страница
Здесь я отправляю тот же сценарий, который я использовал с примером крутящего момента выше:
$ 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
.