Как использовать команду 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 Команда не позволяет напрямую передавать аргументы командной строки во входной скрипт. Есть два основных способа обойти это:

  1. Напишите скрипт-обертку, который вызывает ваш реальный скрипт с соответствующими аргументами. Вы даже можете передать скрипт-обёртку qsub на стандартном вводе, как показано в ответе dbeer, указав имя скрипта в qsub команда как "-"или опуская это полностью.

    Обратите внимание, что если вы сделаете это, любой встроенный #PBS директивы должны быть указаны в скрипте оболочки, а не во внутреннем скрипте, вызываемом оболочкой. Конечно, если вы не используете эту функцию, вам не нужно беспокоиться об этом.

  2. Вместо этого передайте аргументы через среду, используя -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 ...
    
Другие вопросы по тегам