如何使用perl脚本获取在slurm上提交的作业的作业ID号?

如何使用perl脚本获取在slurm上提交的作业的作业ID号?,perl,slurm,Perl,Slurm,我有两份工作,jobA.sh和jobB.sh。我希望在jobA.sh成功完成后启动jobB.sh。为此,我必须获得jobA.sh的jobid编号。但是我的代码的以下部分是有问题的。我的代码给出了以下错误。该错误意味着jobB.sh无法启动。代码无法获取jobA.sh的jobid号。如何获取jobA.sh的jobid号码 错误: 提交的批处理作业298784 sbatch:错误:批处理作业提交失败: 作业依赖问题 代码正确提交了jobA.sh,但给出了jobB.sh的上述错误 my $jobidA

我有两份工作,jobA.sh和jobB.sh。我希望在jobA.sh成功完成后启动jobB.sh。为此,我必须获得jobA.sh的jobid编号。但是我的代码的以下部分是有问题的。我的代码给出了以下错误。该错误意味着jobB.sh无法启动。代码无法获取jobA.sh的jobid号。如何获取jobA.sh的jobid号码

错误:

提交的批处理作业298784 sbatch:错误:批处理作业提交失败: 作业依赖问题

代码正确提交了jobA.sh,但给出了jobB.sh的上述错误

my $jobidA=0;
my $jobs = "sbatch jobA.sh";
system $jobs || die "Error:\n$jobs\nerror";
# I think the following line captures jobid?
($jobs =~ /^Submitted batch job (\d+)/); 
# And the following line stores jobid?
my $jobidA = $1;

my $jobs2 = "$path/jobB.sh";
my $jobs2 = "sbatch --dependency=afterok:$jobidA $jobB.sh";
system $jobs2 || die "Error:\n$jobs2\nerror";

如果要捕获sbatch命令的输出,则不能使用system,但必须使用backticks来捕获输出。使用(未测试代码):


我分别测试了以下代码部分。他们很好。你可以使用它们

如果jobB依赖于jobA,则可以将以下部分添加到代码中。它经过测试

my $jobid1 = 0;
my $jobs = `sbatch jobA.sh`;
$jobs =~ /^Submitted batch job (\d+)/; 
$jobid1 = $1;

my $jobs2 = "$path/jobB.sh";
my $jobs2 = "sbatch --dependency=afterok:$jobid1 $jobB.sh";
system $jobs2 || die "Error:\n$jobs2\nerror";
以下示例中有三个作业依赖于先前提交的作业。这也经过了测试

my $jobid1 = 0;
my $jobs = `sbatch jobA.sh`;
$jobs =~ /^Submitted batch job (\d+)/; 
$jobid1 = $1;

my $jobs2 = "$path/jobB.sh";
my $jobs2 = `sbatch --dependency=afterok:$jobid1 $jobB.sh`;
$jobs =~ /^Submitted batch job (\d+)/; 
$jobid2 = $1;

my $jobs3 = "$path/jobC.sh";
my $jobs3 = "sbatch --dependency=afterok:$jobid2 $jobC.sh";
system $jobs3 || die "Error:\n$jobs3\nerror";
my $jobid1 = 0;
my $jobs = `sbatch jobA.sh`;
$jobs =~ /^Submitted batch job (\d+)/; 
$jobid1 = $1;

my $jobs2 = "$path/jobB.sh";
my $jobs2 = `sbatch --dependency=afterok:$jobid1 $jobB.sh`;
$jobs =~ /^Submitted batch job (\d+)/; 
$jobid2 = $1;

my $jobs3 = "$path/jobC.sh";
my $jobs3 = "sbatch --dependency=afterok:$jobid2 $jobC.sh";
system $jobs3 || die "Error:\n$jobs3\nerror";