【发布时间】:2017-09-16 13:27:22
【问题描述】:
我如何启动一堆 SGE(Sun Grid Engine)作业,其中一些使用 -hold_jid 选项,但不需要巧妙地对 qsub 提交的顺序进行排序。
如果我这样做一切都很好,job2 等待 job1 完成:
qsub job1.sh
qsub -hold_jid job1.sh job2.sh # OK: job2 waits for job1
但是,如果我改为按如下所示的不同顺序提交,job2 会在没有等待 job1 的情况下错误地启动。大概是因为 SGE 看到没有 job1 等待,因为 job1 尚未提交。
qsub -hold_jid job1.sh job2.sh
qsub job1.sh # BAD: job2 does not wait for job1
我尝试了用户保留选项-h,然后使用qalter 释放用户保留,但释放用户保留似乎也释放了-hold_jid 保留:
qsub -h -hold_jid job1.sh job2.sh
qsub -h job1.sh
qalter -h U job*.sh # BAD: job2 does not wait for job1
构建依赖树并开始从叶级别提交作业将解决我的问题。但是我想避免这种情况。我在 RHEL 6 上使用 Sun Grid Engine 6.2u3。
【问题讨论】:
-
我认为这可能是由于您的工作没有在保留中唯一命名。例如 job1 在技术上已完成(过去的 job1)并存储在 SGE 会计日志中的某个位置。因此,当您提交 job2 时,即使 job1 完成已经有一段时间了,job2 仍然会执行。要测试,尝试使用唯一名称命名作业,或使用 jobid。
-
"但释放用户保留似乎也释放了
-hold_jid保留":经过进一步测试,我发现情况并非如此。qsusb在发出命令时立即解释-hold_jid选项,而不是在计划作业时。因此qsub -h -hold_jid job1.sh job2.sh命令将在队列中查找job1.sh,发现没有,然后将job2 放入队列中而不保留。
标签: linux sungridengine