我有一个问题要说,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/ &"
我有一个问题要说,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/ &"
几个猜测。
bash
不会扩展单引号内的变量。你可能是这个意思
bsub -I -q reg -w "done($JOB1)" -J $JOB2 "ls /usr/ &"
当提交第二个作业时,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 ...>