2015-12-14 26 views
1

我正在嘗試編寫一個將多個作業發送到羣集的bash腳本(SGE調度程序),和他們每個人的等待前面的結束,如:當數組中的子作業數量取決於前一個作業的結果時,如何在多個作業的管道中運行陣列作業

HOLD_ID=$(qsub JOB1.sh | cut -c 10-16) 
HOLD_ID=$(qsub -hold_jid $HOLD_ID JOB2.sh | cut -c 10-16) 
HOLD_ID=$(qsub -hold_jid $HOLD_ID JOB3.sh | cut -c 10-16) 

這完美的作品,不過,現在我想添加這個管道的一個holded者陣列作業,如:

qsub -hold_jid $HOLD_ID -t 1-$NB_OF_SUBJOBS JOB4.sh 

但是這裏的子工作的數量($NB_OF_SUBJOBS)我將取決於結果JOB2.sh.

我想這是一個快速的主腳本,只是發送所有的工作。我不想有一段時間+睡覺或類似的東西,這是我的第一次嘗試。工作取決於我需要的數量(JOB2.sh)是相對較長的時間。由於最後一行是在submited時進行評估的,因此前面的JOB2.sh創建的任何具有多個子作業的變量或文件都不起作用。有任何想法嗎?

非常感謝,

大衛

回答

0

所以,如果我明白了,提交作業4的是從工作2的完成獲取信息。如果是這樣的話預測,很明顯你將需要工作2後提交作業4完成,這是從提交作業4和作業完成,其執行保持2.

爲什麼不使用-sync -y選項上工作2有submiss獨立工作4的離子作業2完成之後纔會發生:

qsub -hold_jid $HOLD_ID JOB2.sh -sync y 

確保有工作2輸出n_subjobs變量地方,比如一個文件(以下n_subjobs.txt例子),或者你可以解析輸出到變量,你已經做了作業ID。然後在提交作業4時閱讀此信息:

qsub -t 1-$(cat n_subjobs.txt) JOB4.sh 
+0

非常感謝,它是一個完美而乾淨的解決方案。 – David

+0

歡迎您。請接受答案。 – Vince

相關問題