2016-07-28 121 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