我有一个问题要求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/ &"
答案 0 :(得分:1)
几个猜测。
bash
不会扩展单引号内的变量。你可能意味着这个
bsub -I -q reg -w "done($JOB1)" -J $JOB2 "ls /usr/ &"
提交第二份工作时,LSF可能不知道第一份工作。由于第一个bsub是在后台运行的,所以bsubs" race"彼此。它可能是第二个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 ...>