2012-08-23 126 views
8

說我使用類似bsub pwd的東西提交一份工作。現在我想獲得該職位的工作ID,以便爲下一份工作建立一個依賴關係。有什麼方法可以讓bsub返回作業ID?LSF - 獲取提交作業的ID

回答

5

作爲參考,這是迄今爲止我可以提出的最佳解決方案。它利用了bsub將包含ID的行寫入STDOUT的事實。

function nk_jobid { 
    output=$($*) 
    echo $output | head -n1 | cut -d'<' -f2 | cut -d'>' -f1 
} 

用法:

jobid=$(nk_jobid bsub pwd) 
+0

它的語言是什麼? –

+0

@AndreyRubshtein多數民衆贊成在。 – jsmedmar

+0

我想知道如何在$(nk_jonid bsub $ VARIABLE) – jsmedmar

0
$jobid = "0" 
bsub pwd > $jobid 
cat $jobid 
4

如果您使用的是C++,你可以使用lsblib,LSF C API提交作業。輸入和輸出是結構。特別是,輸出結構體包含作業ID。

#include <lsf/lsbatch.h>  
LS_LONG_INT lsb_submit (struct submit *jobSubReq, struct submitReply *jobSubReply) 
7

Nils和Andrey分別在shell和C/C++環境中解答了這個特定問題。對於建築的依賴的目的,你也可以命名你的工作和-J然後建立基於作業名的依賴:

bsub -J "job1" <cmd1> 
bsub -J "job2" <cmd2> 
bsub -w "done(job1) && done(job2)" <cmd> 

有更多的信息here

這也適用於工作數組:

bsub -J "ArrayA[1-10]" <cmd1> 
bsub -J "ArrayB[1-10]" <cmd2> 
bsub -w "done(ArrayA[3]) && done(ArrayB[5])" <cmd> 

你甚至可以做元素乘元素的依賴。下面作業的個元素將只運行時ArrayB相應的元件達到DONE狀態:

bsub -w "done(ArrayB[*])" -J "ArrayC[1-10]" <cmd3> 

你可以找到各種各樣的事情更多信息,你可以在-where指定。

+0

(+1)中傳遞一個變量,你注意到了問題的實際意圖。 –

+1

這是好的,但它不適用於作業數組... – jsmedmar

+0

@jsmedmar其實,它的確如此。我會在答案中添加一些細節。 – Squirrel

0

如果您只是想在提交後查看JOBID,大部分時間我只會使用bhist或bhist -l來查看正在運行的作業和詳細信息。

$ bhist 
Summary of time in seconds spent in various states: 
JOBID USER JOB_NAME PEND PSUSP RUN  USUSP SSUSP UNKWN TOTAL 
8664 F14r3 sample  2  0 187954 0  0  0  187956