Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
制作PBS脚本并提交给qsub的Perl脚本_Perl_Automation_Pbs_Qsub - Fatal编程技术网

制作PBS脚本并提交给qsub的Perl脚本

制作PBS脚本并提交给qsub的Perl脚本,perl,automation,pbs,qsub,Perl,Automation,Pbs,Qsub,我正在尝试自动生成PBS脚本和提交qsub。我有N个文件夹,每个文件夹包含子文件夹。我想移动到每个文件夹和子文件夹,创建PBS脚本并从该文件夹提交PBS脚本。我编写了一个perl脚本来执行同样的操作,运行良好。创建PBS脚本时没有任何问题,但使用qsub提交时,不会执行作业 有趣的是,我观察到,如果我在文本编辑器中打开PBS脚本并保存它(在vim中使用“:wq”,如果我在不保存“:q”的情况下退出,则无法执行作业) 我想知道为什么会发生这种情况,有什么自动化的解决方案吗?我知道有一些方法可以做到

我正在尝试自动生成PBS脚本和提交qsub。我有N个文件夹,每个文件夹包含子文件夹。我想移动到每个文件夹和子文件夹,创建PBS脚本并从该文件夹提交PBS脚本。我编写了一个perl脚本来执行同样的操作,运行良好。创建PBS脚本时没有任何问题,但使用qsub提交时,不会执行作业

有趣的是,我观察到,如果我在文本编辑器中打开PBS脚本并保存它(在vim中使用“:wq”,如果我在不保存“:q”的情况下退出,则无法执行作业)

我想知道为什么会发生这种情况,有什么自动化的解决方案吗?我知道有一些方法可以做到这一点,而无需更改文件夹和子文件夹-通过直接提供文件路径,但我试图了解这里出了什么问题

#!/usr/bin/perl
use strict;
use warnings;
use File::Copy 'move';
use Cwd;

##################################################################

my @folders = ("folder1","folder2","folder3");
my $original_path = cwd();
my $queue_name = $ARGV[0];

##################################################################

# Call function for each folder in the list

foreach  (@folders) {
        submit_qsub($_);
}

##################################################################

# Function to change folders, call another function to make PBS script, submit PBS script using system command    

sub submit_qsub {
        my $folder = $_;
        print "\nFunction for $folder called\n";
        chdir ("./$folder" or die "Can't cd to $folder $!\n");
        chdir ("./V1");
        mkdir ("jobname");
        chdir ("jobname");
        create_pbs_script($folder,'V1','jobname');
        system("qsub jobname_$folder\_V1.pbs");
        chdir ("../../V2/");
        mkdir ("jobname");
        chdir ("jobname");
        create_pbs_script($folder,'V2','jobname');
        system("qsub jobname_$folder\_V2.pbs");
        print "Leaving current directory\n";
        chdir ($original_path);
}

##################################################################

# Function to write PBS scripts
# test - print numbers 1 to 100

sub create_pbs_script {
        my $folder = $_[0];
        my ($vid, $chdid) = split /_/, $folder;
        my $v_no = $_[1];
        my $job = $_[2];
        my $filename = "$job\_$folder\_$v_no.pbs";
        #print $filename;
        open(my $fh, '>', "$job\_$folder\_$v_no.pbs") or die " Cannot write PBS script $job\_$folder\_$v_no\n";
        print $fh "#PBS -N $job\_$folder\_$v_no\n#PBS -q $queue_name\n#PBS -l nodes=1:ppn=1\n#PBS -l walltime=00:10:00\n#PBS -l mem=1gb\n#PBS -j oe\n\ncd \$PBS_O_WORKDIR\n\nfor i in {1..100};do echo \$i;done";
        close $fh;
}

##################################################################
更新:在通过qsub提交之前,我插入了一个系统命令以打开并保存在vim中,然后执行作业。我已经有了这个代码,但我仍然不知道为什么我需要这样做

system("vim pbsfilename -c 'wq'"); 

你能详细说明一下“工作不会被执行”吗?是否有错误消息?是否检查了作业脚本的权限?1)在这种情况下,作业将打印1到100之间的数字。这应该出现在qsub输出文件中。但输出文件没有此错误消息或任何错误消息。它只有PBS的序言和尾声信息。2) 我猜PBS脚本的读/写权限足够了,但使其可执行并尝试了,不起作用。因此,作业在Torque中运行,但输出与预期不同?是的,它在Torque中运行,但没有输出或错误!