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