3

jobA.sh と jobB.sh の 2 つのジョブがあります。jobA.sh が正常に完了した後に、jobB.sh を開始したい。このためには、jobA.sh のジョブ ID 番号を取得する必要があります。しかし、私のコードの次の部分には問題があります。私のコードは次のエラーを出します。このエラーは、jobB.sh が開始されないことを意味します。コードは、jobA.sh のジョブ ID 番号を取得できませんでした。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";
4

2 に答える 2

2

次のコード部分を個別にテストしました。大丈夫です。それらを使用できます。

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";

次の例には、以前に送信されたジョブに依存する 3 つのジョブがあります。これもテスト済み。

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";
于 2015-05-27T19:17:12.147 に答える