2012-12-13 28 views

回答

-1

有一個很好的繞過了這一點。

生成一個簡單的bash文件:

#!/bin/bash 
sleep 6000 #replace 6000 with any long period of time that will be enough to submit your jobs 

提交此作業要排除,直到他們完全佔據它的節點。

Wuala,你的節點是排除的。

+0

這是一個黑客,但唯一的解決方案適用於我(+1)。我嘗試了一打qsub變種,但他們要麼沒有區別或導致錯誤.... – DaveFar

2

我發現的最佳方法是在要允許執行的節點上設置自定義資源,然後在提交作業時需要該資源。

在qmon中,轉到「複雜」配置並添加一個新屬性。將名稱設置爲「my_allowed」和快捷方式,例如「m_a」,類型爲BOOL,與==的關係,可請求爲Yes,可以使用否,以及「添加」。將您的更改提交給複雜的配置。

下一步可能更容易從命令行執行,但您也可以在qmon中執行此操作。您需要將您的耗材添加到每臺主機上,以便讓您的作業能夠運行。在qmon中,您可以轉到主機配置,選擇執行主機,然後依次打開每個主機,單擊消耗品/固定屬性選項卡,然後將剛剛配置的新複合體添加爲「True」作爲值。在命令行中,您可以使用「qconf -sel」獲取執行主機的列表。這個列表適合傳遞給循環並挑選出你不想包含的主機。做這樣的事情:

qconf -sel | grep -v host_to_exclude | while read host; do 
    EDITOR="ed" qconf -me $h <<EOL 
/complex_values/s/$/,my_test=True/ 
w 
q 
EOL 
done 

這讓你以編程方式編輯主機(通常不被qconf允許,因爲它想爲你啓動你的編輯器)。它通過將編輯器設置爲「ed」來完成此操作(您必須確保已安裝ed編輯器...先嚐試手動運行它,然後鍵入「q」以脫身)。 ed獲取stdin上的編輯命令列表,所以我們給它三個命令。第一個編輯行上的complex_values包含my_test值。第二個寫出臨時文件,第三個退出編輯。

qsub -q whatever -l my_test=True my_prog.sh 

-l選項設置一個上限和my_test =真說,作業只能運行:

一旦你做到了這一點,與需要新的複雜的限制選項提交您的工作主機具有值爲True的複雜my_test。由於該組合系統不是可使用的,所以它仍然可以在每個主機上運行儘可能多的作業(達到主機的插槽限制),但它將避免沒有將my_test組合系統設置爲True的主機。

15

假設你不想運行它被稱爲n4然後 添加以下內容到您的腳本應該工作。

#$ -l h=!n4 
+2

我得到「qsub:提交錯誤(未知資源類型Resource_List.h)」 – dranxo

+0

謝謝。你如何做到這兩個主機名? '#$ -l h =!n4 h!= n5'或'#$ -l h!= n4,n5'不起作用 – Arman

+0

h =!h4&!h5或h =!(h4 | h5)應該這樣做。 –