Подтвердить что ты не робот

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

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

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

qsub: недопустимый параметр - s

qsub: незаконное -r значение

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

Спасибо

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

МОМЕНТА: qsub -F <arguments> command

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

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

echo [email protected]

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

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

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

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

Sun Grid Engine: qsub command [ command_args ]

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

Slurm: sbatch command [ command_args ]

справочная страница
Здесь я отправляю те же script, которые я использовал с приведенным выше примером крутящего момента:

$ 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.