Как использовать команду qsub -v в крутящем моменте PBS со скриптом perl?
Я хотел бы передать переменные в сценарий Perl с помощью команды "qsub -v". Это скрипт Perl, который я бы запустил (это просто тест, но если он не работает, я не могу сделать что-нибудь более сложное)
#!/usr/bin/perl
use Getopt::Long;
$result = GetOptions ("i=s" => \$config_file);
open(FILE,">/data/home/FILEout.txt");
open(FILE_CONFIG,"<$config_file");
while(<FILE_CONFIG>){
print FILE "$config_file\n";
}
close(FILE_CONFIG);
close(FILE);
Итак, если бы я запускал этот скрипт (не через qsub), я бы набрал:
perl Test.pl -i FILE_CONFIG.txt
Однако я бы запустил этот скрипт на узле кластера, который работает с PBS. Я сделал несколько попыток, как следующая:
qsub -l nodes=node06 -v i=/data/home/FILE_CONFIG.txt Test.pl
но это не работает Кто-нибудь, как идея, как я должен передать параметр в мой Perl-скрипт с использованием qsub? Любая помощь могла бы быть полезна
"Не работает" означает, что использование qsub ничего не печатает в выходном файле, а использование perl - вывод содержимого входного файла в выходной файл. Похоже, это не занимает ничего на входе
2 ответа
Будет ли вам легче представить работу следующим образом:
echo "perl /absolute/path/to/Test.pl -i FILE_CONFIG.txt" | qsub -l nodes=node06
Затем, если вы знаете, что Test.pl находится в пути, указанном вами на узле 06, он должен работать правильно.
qsub
Команда не позволяет напрямую передавать аргументы командной строки во входной скрипт. Есть два основных способа обойти это:
Напишите скрипт-обертку, который вызывает ваш реальный скрипт с соответствующими аргументами. Вы даже можете передать скрипт-обёртку
qsub
на стандартном вводе, как показано в ответе dbeer, указав имя скрипта вqsub
команда как "-
"или опуская это полностью.Обратите внимание, что если вы сделаете это, любой встроенный
#PBS
директивы должны быть указаны в скрипте оболочки, а не во внутреннем скрипте, вызываемом оболочкой. Конечно, если вы не используете эту функцию, вам не нужно беспокоиться об этом.Вместо этого передайте аргументы через среду, используя
-v
переключиться наqsub
, Если вашqsub
Команда выглядит так:qsub -l nodes=node06 -v CONFIG=/data/home/FILE_CONFIG.txt Test.pl
тогда ваш
Test.pl
скрипт может прочитать путь к файлу конфигурации из$ENV{CONFIG}
, как это:#!/usr/bin/perl use strict; use warnings; my $config = $ENV{CONFIG} || 'default_config_file_path.txt'; open CONFIG, '<', $config or die "Error opening $config: $!\n"; # ... rest of script here ...