параметр для сценариев оболочки, который начинается с QSub

StackOverflow https://stackoverflow.com/questions/3504081

Вопрос

Как я могу параметризировать сценарий оболочки, который выполняется в сетке (начинается с 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top