如何使用-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。
答案 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。