【问题标题】:Simultaneous starting -hold_jid jobs on Sun Grid Engine在 Sun Grid Engine 上同时启动 -hold_jid 作业
【发布时间】: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


【解决方案1】:

如果@Vince 是正确的,并且 SGE 真的在等待尚未启动的作业,那么实现您的目标的唯一方法就是在您的所有作业名称中添加一个独特的部分。

如果作业未按正确顺序启动,则使用 jobid 将不起作用,因为您无法猜测未来作业的 jobid。如果 job1 还没有启动,job2 qsub 执行无法猜测 job1 jobid 将等待什么...

例如:

uniqueID=`date "+%Y-%m-%d_%H-%M-%S"`
qsub -N "job2_$uniqueID" -hold_jid "job1_$uniqueID" job2.sh
qsub -N "job1_$uniqueID" job1.sh

这样,无论作业启动顺序如何,job2都会等待job1。

【讨论】:

  • 不起作用。与我上面的问题完全相同的行为,即第一次启动 job1 使 job2 很好地等待,但第一次启动 job2 并没有保持它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
相关资源
最近更新 更多