0

我有一个问题要说,job1 在 LSF 中使用变量名动态等待 job2,这是我的代码

#!/bin/bash

JOB1=first
JOB2=second

bsub -I -q reg -J $JOB1 "ls /bin*" &
bsub -I -q reg -w 'done("$JOB1")' -J $JOB2 ls /usr/ &"
4

1 回答 1

1

几个猜测。

  1. bash不会扩展单引号内的变量。你可能是这个意思

    bsub -I -q reg -w "done($JOB1)" -J $JOB2 "ls /usr/ &"
    
  2. 当提交第二个作业时,LSF 可能不知道第一个作业。由于第一个 bsub 在后台运行,两个 bsub 相互“竞争”。第二个 bsub 可能在第一个之前与 mbatchd 对话。 strace表明这是可能的。

    [pid  8413] 18:48:30.533859 execve(".../bsub", ["bsub", "-I", "-J", "first", "ls /bin/*"], [/* 45 vars */] <unfinished ...>
    [pid  8414] 18:48:30.534415 execve(".../bsub", ["bsub", "-I", "-w", "done(first)", "-J", "second", "ls /usr/ &"], [/* 45 vars */] <unfinished ...>
    ...
    [pid  8414] 18:48:30.572521 connect(5, {sa_family=AF_INET, sin_port=htons(6881), sin_addr=inet_addr("a.b.c.d")}, 16 <unfinished ...>
    [pid  8413] 18:48:30.573422 connect(5, {sa_family=AF_INET, sin_port=htons(6881), sin_addr=inet_addr("a.b.c.d")}, 16 <unfinished ...>
    
于 2015-03-07T00:21:52.117 回答