2013-08-22 150 views
1

我有一堆作業提交給PBS隊列,輸出應該在本地後處理。由於作業類似(我不想經常手動更改),我寫了一個bash腳本,它在本地生成PBS作業腳本,然後提交作業。 我的問題如下:如何讓我的bash腳本等到PBS作業完成後再開始後期處理? (不斷檢查工作狀態不是一種選擇。)我有什麼可能做到這一點?在bash腳本中運行PBS腳本和後處理輸出

非常感謝所有提示,提示或解決方案!

編輯:正如在評論(感謝)表示,一些編輯:

  • PBS =便攜式批處理系統
  • 文檔可以在這裏找到:http://resources.altair.com/pbs/documentation/support/PBSProUserGuide12.1.pdf
  • 我想到了可能的解決方案,並與上前但是下面這個不起作用:我可以讓我的bash腳本等待作爲工作的掛鐘時間請求的時間量。但是,有兩個複雜因素:首先,作業可能不需要那麼多時間並提前終止,因此使bash腳本等待時間過長;其次,工作可能會排隊,而不是立即執行,因此bash腳本可能會等待太久。

編輯2: 由於我不知道我是否可以隨時交互運行如下的建議,我想到了以下內容:我有PBS作業腳本創建一個(空)剛剛完成之前提交。我的bash腳本檢查每隔幾分鐘(比如說)該文件是否存在(使用while循環)。如果存在,我知道作業已經終止,並且可以通過刪除剛剛創建的(空的)文件來開始後期處理。這樣,我最多隻能延遲幾分鐘,並不需要任何資源。這絕對不是理想的,而是一種解決方法。 任何更實際的想法都受到高度讚賞。

即使與PBS沒有直接關係,也可以認爲任何想法。

卡里

+0

考慮加入一個鏈接到文檔'pbs'(在美國,這意味着公共廣播系統)。請注意,'pbs'只有18個關注者,所以這可能不是廣爲人知的技術。這就是說,S.O.是不是一個免費的編碼服務,你應該已經嘗試解決你的問題,並已發佈代碼(正確格式)在你的問題。祝你好運。 – shellter

回答

0

我不相信PBSPro支持這一點,但扭矩(另一PBS衍生物)有一個你可能會感興趣的-x選項,您可以提交這樣的工作:

qsub -I -x <executable> 

這將以交互方式運行您的作業並運行可執行文件,並將所有輸出發送到您的終端,並且只要該可執行文件終止,作業就會立即執行。那時你可以開始後期處理。 PBSPro可能有類似的功能,但我在這裏描述的是TORQUE。

+0

謝謝!這聽起來不僅對上述問題非常有用。但是,我不確定我是否可以始終以交互方式運行這項工作。我一定會看看它! –

0

這與an answer I wrote to a different question有關。我可以訪問校園高性能計算中心的幾臺機器。至少在其中一個羣集上,允許從父母PBS腳本調用qsub。這可以按照this page中所述進行作業鏈接。所以,你可以使用一個解決方案,如下列骨架:

# ...do your PBS stuff 
# launch your code on the cluster that creates, say "JOBID.txt" 
parallel -j0 mycode.sh 

# you may need to use PBS environment variables to figure out what your output file is called 
filename=$${PBS_JOBID%%.*}.txt # e.g., this would be like the JOBID.txt I wrote above 

# next, use qsub to launch the post-processing script 
echo "${PBS_O_WORKDIR}/postprocess.pbs $filename" | qsub 

posprocess.pbs將採取的文件名來處理作爲參數。在我鏈接的答案中,這對我來說完成後將PBS標準輸出文件複製到另一個文件。不過,我不知道可能的競爭條件下,您可能需要使用-W depend=的qsub選項,這樣的事情(未測試):

echo "-W depend=afterok:$PBS_JOBID postprocess.pbs $filename" | qsub