在Sun Grid Engine上同时启动-hold_jid作业

时间:2017-09-16 13:27:23

标签: linux sungridengine

如何使用-hold_jid选项启动一堆SGE(Sun Grid Engine)作业,但不要求对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。

1 个答案:

答案 0 :(得分:0)

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

如果没有以正确的顺序启动工作,那么使用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。