按顺序执行批处理作业

Execute batch jobs sequentially

我有一个看起来像这样的批处理作业

sbatch --wrap "perl test.pl file1 file2"

sbatch --wrap "perl test.pl file3 file4"

sbatch --wrap "perl test.pl file5 file6"

sbatch --wrap "perl test.pl file7 file8"

& 这个列表一直持续到

sbatch --wrap "perl test.pl file49 file50"

我怎样才能 运行 按顺序执行单个作业? 谢谢,

您必须使一个脚本依赖于前一个脚本的完成:

JOBID=$(sbatch --wrap "perl test.pl file1 file2" | awk '{print }')
for N in {3..49..2}
do
    JOBID=$(sbatch -d afterok:$JOBID --wrap "perl test.pl file$N file$(($N+1))" | awk '{print }')
done

顺便说一句,评论中建议的 singleton 方法也是一个很好的方法,可以让您摆脱 JobID 管理的困扰。