一旦其他人完成,我就会启动一个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 :(得分:0)
当连接作业启动时,服务器仍然需要知道所依赖的作业;如果其中任何一个已从qstat
消失,那么您需要在keep_completed
中增加qmgr
。否则,当连接作业准备好运行时,依赖关系将永远不会得到满足,并且保持永远不会被释放。
要检查:$ qmgr -c 'print server keep_completed'
添加/修改:$ qmgr -c 'set server keep_completed=300'
(我也相信你可以在队列上设置keep_completed
。)