1

「qsub-v」コマンドを使用して、変数をperlスクリプトに渡したいと思います。これは私が実行する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 

しかし、それは機能しません。qsubを使用してパラメータをperlスクリプトに渡す方法を考えている人はいますか?どんな助けでも本当にありがたいです

動作しないということは、qsubを使用しても出力ファイルに何も出力されないのに対し、perlを使用すると出力ファイルの入力ファイルの内容が出力されることを意味します。入力に何も取らないようです

4

2 に答える 2

2

この方法でジョブを送信する方が簡単でしょうか。

echo "perl /absolute/path/to/Test.pl -i FILE_CONFIG.txt" | qsub -l nodes=node06

次に、Test.plがnode06で指定したパスにあることがわかっている限り、正しく機能するはずです。

于 2013-03-28T15:39:13.550 に答える
0

このqsubコマンドでは、コマンドライン引数を入力スクリプトに直接渡すことはできません。これを回避する基本的な方法は2つあります。

  1. 適切な引数を使用して実際のスクリプトを呼び出すラッパースクリプトを記述します。コマンドでスクリプト名を「 」として指定するか、完全に省略することで、 dbeerの回答に示されているように、ラッパースクリプトをqsub標準入力に渡すこともできます。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 ...
    
于 2013-03-28T17:02:20.523 に答える