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

标签 perl slurm

我有两个作业,jobA.sh 和 jobB.sh。我希望 jobB.sh 在 jobA.sh 成功完成后启动。为此,我必须获得 jobA.sh 的 jobid 编号。但是我的代码的以下部分是有问题的。我的代码给出了以下错误。该错误意味着 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 = $1;

my $jobs2 = "$path/jobB.sh";
my $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 = $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";

关于perl - 如何使用 perl 脚本获取在 slurm 上提交的作业的 jobid 编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30480835/

相关文章:

linux - 我如何知道我在 slurm 上运行的作业的节点名称

slurm - 使用salloc获取启动的shell的ID

Python:集群作业管理

perl - 在 post 方法、perl、 Mechanize 、重定向后保存 cookie

perl - 如何从 Perl CGI 应用程序安排一次性任务?

arrays - 如何在 perl 中查找数组元素内的所有匹配项并从每个匹配项创建一个新元素?

python - slurm 超出了 python 多处理的作业内存限制

visual-studio - 如何使用交互式 session 在远程 VS 代码的调试 session 中运行代码?

regex - 更有效的正则表达式来解析 linux 顶级命令值

Perl:在不死的情况下捕获错误