如何使用 perl 脚本获取在 slurm 上提交的作业的 jobid 编号?
How can I get the jobid number of a job submitted on slurm using perl script?
我有两份工作,jobA.sh 和 jobB.sh。我希望 jobB.sh 在 jobA.sh 成功完成后开始。为此,我必须获得 jobA.sh 的工作编号。但是我的代码的以下部分是有问题的。我的代码给出了以下错误。该错误意味着 jobB.sh 没有启动。代码无法获取 jobA.sh 的 jobid 编号。我怎样才能得到jobA.sh的jobid号?
错误:
Submitted batch job 298784 sbatch: error: Batch job submission failed:
Job dependency problem
该代码正确提交了 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 = ;
my $jobs2 = "$path/jobB.sh";
my $jobs2 = "sbatch --dependency=afterok:$jobidA $jobB.sh";
system $jobs2 || die "Error:\n$jobs2\nerror";
如果要捕获 sbatch 命令的输出,则不能使用系统,而必须使用反引号来捕获输出。使用(未经测试的代码):
my $jobidA=0;
my $jobs = "sbatch jobA.sh";
my $output = `$jobs`
($jobs =~ /^Submitted batch job (\d+)/);
$jobidA = ;
my $jobs2 = "$path/jobB.sh";
$jobs2 = "sbatch --dependency=afterok:$jobidA $jobB.sh";
system $jobs2 || die "Error:\n$jobs2\nerror";
我分别测试了以下代码部分。他们都还好。你可以使用它们。
如果jobB 依赖于jobA,您可以将以下部分添加到您的代码中。已测试。
my $jobid1 = 0;
my $jobs = `sbatch jobA.sh`;
$jobs =~ /^Submitted batch job (\d+)/;
$jobid1 = ;
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 = ;
my $jobs2 = "$path/jobB.sh";
my $jobs2 = `sbatch --dependency=afterok:$jobid1 $jobB.sh`;
$jobs =~ /^Submitted batch job (\d+)/;
$jobid2 = ;
my $jobs3 = "$path/jobC.sh";
my $jobs3 = "sbatch --dependency=afterok:$jobid2 $jobC.sh";
system $jobs3 || die "Error:\n$jobs3\nerror";
我有两份工作,jobA.sh 和 jobB.sh。我希望 jobB.sh 在 jobA.sh 成功完成后开始。为此,我必须获得 jobA.sh 的工作编号。但是我的代码的以下部分是有问题的。我的代码给出了以下错误。该错误意味着 jobB.sh 没有启动。代码无法获取 jobA.sh 的 jobid 编号。我怎样才能得到jobA.sh的jobid号?
错误:
Submitted batch job 298784 sbatch: error: Batch job submission failed: Job dependency problem
该代码正确提交了 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 = ;
my $jobs2 = "$path/jobB.sh";
my $jobs2 = "sbatch --dependency=afterok:$jobidA $jobB.sh";
system $jobs2 || die "Error:\n$jobs2\nerror";
如果要捕获 sbatch 命令的输出,则不能使用系统,而必须使用反引号来捕获输出。使用(未经测试的代码):
my $jobidA=0;
my $jobs = "sbatch jobA.sh";
my $output = `$jobs`
($jobs =~ /^Submitted batch job (\d+)/);
$jobidA = ;
my $jobs2 = "$path/jobB.sh";
$jobs2 = "sbatch --dependency=afterok:$jobidA $jobB.sh";
system $jobs2 || die "Error:\n$jobs2\nerror";
我分别测试了以下代码部分。他们都还好。你可以使用它们。
如果jobB 依赖于jobA,您可以将以下部分添加到您的代码中。已测试。
my $jobid1 = 0;
my $jobs = `sbatch jobA.sh`;
$jobs =~ /^Submitted batch job (\d+)/;
$jobid1 = ;
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 = ;
my $jobs2 = "$path/jobB.sh";
my $jobs2 = `sbatch --dependency=afterok:$jobid1 $jobB.sh`;
$jobs =~ /^Submitted batch job (\d+)/;
$jobid2 = ;
my $jobs3 = "$path/jobC.sh";
my $jobs3 = "sbatch --dependency=afterok:$jobid2 $jobC.sh";
system $jobs3 || die "Error:\n$jobs3\nerror";