2017-09-16 36 views
0

如何開始一堆使用-hold_jid選項的SGE(Sun Grid Engine)作業,但不需要巧妙排序qsub提交的順序。Sun Grid Engine上的同時啓動-hold_jid作業

如果我做到這一點寄託都很好,其中JOB2等待JOB1結束:

qsub     job1.sh 
qsub -hold_jid job1.sh job2.sh    # OK: job2 waits for job1 

但是,如果我不是以不同的順序如下圖所示提交,作業2錯誤啓動,而無需等待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

我*想*這可能是由於您的工作沒有在保有中唯一命名。例如,job1在技術上完成(過去的job1)並存儲在SGE記帳日誌的某處。所以,當你提交job2時,即使job1完成已經有一段時間了,job2仍然會執行。要測試,請嘗試使用唯一名稱命名作業,或者使用jobid。 – Vince

+0

「,但釋放用戶持有似乎也釋放'-hold_jid'持有」:進一步測試我發現情況並非如此。 'qsusb'在命令發出時立即解釋'-hold_jid'選項,而不是在作業排定時解釋。因此,'qsub -h -hold_jid job1.sh job2.sh'命令將在隊列中查找'job1.sh',看到沒有,並將job2置於隊列中,而不保留。 –

回答

0

如果@Vince是正確的,SGE確實在等待尚未啓動的作業,那麼實現目標的唯一方法就是向所有用戶添加一個獨特的部分工作名稱。

如果由於無法猜測未來作業的作業ID而導致作業未按正確順序啓動,則使用jobid將不起作用。如果JOB1尚未推出,作業2的qsub執行猜不出會是怎樣JOB1作業ID等待...

例如:

uniqueID=`date "+%Y-%m-%d_%H-%M-%S"` 
qsub -N "job2_$uniqueID" -hold_jid "job1_$uniqueID" job2.sh 
qsub -N "job1_$uniqueID" job1.sh 

這樣一來,無論工作啓動順序,作業2將等待JOB1。

+0

不起作用。與我上面問題中的行爲完全相同,即第一次啓動job1會使job2等待很好,但首次啓動job2不會保留它。 –

相關問題