2016-07-28 116 views
2

一旦其他人完成,我将启动一个pbs脚本。对于我使用这个命令:等待已完成的作业

$ job1=$(qsub job1.pbs) 
$ jobN=$(qsub jobN.pbs) 
$ qsub -W depend=afterok:$job1:$jobN join.pbs 

这工作,在大多数情况下。但是,如果我在job1和jobN已完成时运行加入脚本,它将无限期地空闲,因为它正在等待已完成的作业完成。这听起来很疯狂,但这是发生了什么。如果我运行qstat我可以清楚地看到,我的加盟工作正在举行(“H”)

$ qstat -u me 
Job ID   Username Queue Jobname SessID NDS TSK Memory Time S Time 
--------------- -------- -------- ---------- ------ --- --- ------ ----- - ----- 
1990613   me workq join.pbs  -- 1 1 -- -- H -- 

但是如果作业中的至少一个仍然在运行,而另一个已经完成,那么在加入脚本不会闲置并完成。

那么有什么解决方案来处理已经结束的工作?我们显然需要完成这项工作。

+0

如果作业从'qstat'消失了,这意味着你需要增加'keep_completed'。否则,当联接作业准备好运行时,依赖关系永远不会满足,并且永远不会释放。 – clusterdude

+0

您使用的是什么版本的扭矩?这可能是你遇到了一个已经修复的错误。 – dbeer

回答

0

当加入作业开始时,服务器仍然需要知道所依赖的作业;如果其中任何一个从qstat中消失,则需要在qmgr中增加keep_completed。否则,当联接作业准备好运行时,依赖关系永远不会满足,并且永远不会释放。

检查:$ qmgr -c 'print server keep_completed'

添加/修改:$ qmgr -c 'set server keep_completed=300'

(我也相信你可以设置队列keep_completed