Есть лучший способ ...
Я действительно удивлен тем, как долго этот вопрос обходился без хорошего ответа.Возможно, конкретная версия qsub
не указана.qsub
существует как минимум в Torque, а также в Sun Grid Engine, возможно, в других планировщиках.Итак, важно знать, что вы используете.Я расскажу о некоторых из них здесь:
TORQUE: qsub -F <arguments> command
man page
Вот пример того, как я обычно его использую.Начиная с этого примера сценария, который просто повторяет любые передаваемые ему аргументы:
$ 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
Подсистема Sun Grid: qsub command [ command_args ]
Страница man
Вы просто добавляете аргументы после команды, так же, как если бывыполнение в оболочке.У меня нигде не работает SGE, так что нет примера для этого.Но то же самое со Slurm, который ниже
Slurm: sbatch command [ command_args ]
man page
Здесь я отправляю тот же скрипт, который использовал в примере 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
.