gpt4 book ai didi

linux - SGE 网格作业依赖

转载 作者:太空狗 更新时间:2023-10-29 12:26:05 27 4
gpt4 key购买 nike

我在简化一系列 SGE 网格作业时遇到了难题,这些作业之间有一定的依赖性,但还没有找到指定 -hold_jid 的正确方法。

假设我们有这样的工作:

job1: qsub -N job1 ... 
job2: qsub -N job2 -hold_jid job1
job3: qsub -N job3 -hold_jid job2

那么执行顺序保证是job1->job2->job3。

但是,假设在复杂的 job2 中,有一个嵌入式 SGE 作业,比如 job2a:

job2a: qsub -N job2a.${timestamp_of_submission}

在这种情况下,我还没有找到一种方法来确保 job3 在 job2a 完成后运行。

尝试1:

qsub -N job3 -hold_jid job2 ...

然后 job3 肯定会等到 job2 完成,但是,不能保证 job3 会在 job2a 之后执行,这正是我想要的。

尝试2:

qsub -N job3 -hold_jid job2a* ...

然后 job3 似乎立即执行,因为 job2a 在 job2 开始运行之前不会显示在作业数组中。注意我在上面使用了 * 来避免指定 job2a 的确切名称,因为提交的时间戳很难事先猜测。

有谁知道一种实现依赖链的方法,如job1->job2->job2a->job3?谢谢!

最佳答案

你试过给 -hold_jid 一个任务 ID 列表吗:

qsub -N job2
qsub -N job2a
qsub -N job3 -hold_jid job2,job2a.${timestamp_of_submission}

或者,捕获作业 ID 也应该有效:

job2a=$(qsub -N job2a.${timestamp_of_submission} | perl -p -e "s/Your job (\d+) .*/\1/g;")
qsub -N job3 -hold_jid job2,${job2a}

编辑

根据评论,您需要获取作业 ID 列表。

所以我建议如下:

job2list=$(qsub -N job2 | perl -p -e "s/Your job (\d+) .*/\1/g;")

上面存储了作业 2 的作业 ID。

然后每次提交 job2a 类型的作业时:

job2a=$(qsub -N job2a.${timestamp_of_submission} | perl -p -e "s/Your job (\d+) .*/\1/g;")
job2list="${job2list},${job2a}"

上面的代码会将 job2a job id 附加到 job2 的 id 上。

准备好提交作业 3 时:

qsub -N job3 -hold_jid ${job2list}

关于linux - SGE 网格作业依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39887210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com