12

假设我使用类似bsub pwd. 现在我想获取该工作的工作 ID,以便为下一个工作建立依赖关系。有什么方法可以让 bsub 返回作业 ID?

4

5 回答 5

8

作为参考,这是迄今为止我能想到的最佳解决方案。它利用了 bsub 将包含 ID 的行写入 STDOUT 的事实。

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

用法:

jobid=$(nk_jobid bsub pwd)
于 2012-08-23T14:41:52.680 回答
8

Nils 和 Andrey 分别在 shell 和 C/C++ 环境中给出了这个特定问题的答案。出于构建依赖关系的目的,您还可以使用 -J 命名您的作业,然后根据作业名称构建依赖关系:

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

这里有更多信息。

这也适用于作业数组:

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

您甚至可以进行逐个元素的依赖。以下作业的第i个元素仅在相应元素ArrayB达到DONE状态时运行:

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

-w 您可以在此处找到有关您可以指定的各种内容的更多信息。

于 2013-09-12T15:11:52.783 回答
4

如果您使用 C++,您可以使用lsblib、 LSF C API 来提交作业。输入和输出是结构。特别是,输出结构包含作业 ID。

#include <lsf/lsbatch.h>    
LS_LONG_INT lsb_submit (struct submit *jobSubReq, struct submitReply *jobSubReply)
于 2013-05-12T15:19:07.470 回答
0
$jobid = "0"
bsub pwd > $jobid
cat $jobid
于 2013-04-26T07:54:05.213 回答
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 
于 2013-11-25T16:01:07.387 回答