在LSF作业数组中引用作业索引

Sar*_*rah 2 bash jobs hpc lsf

我正在尝试将作业数组中的作业索引作为参数传递给另一个bash脚本.

numSims=3 
numTreatments=6 # uses numTreatments top rows of parameters.csv
maxFail=10
j=1
while [ $j -le $numSims ];
do
    bsub -q someQueue -J "mySim[1-$numTreatments]%2" ./another_script.sh $LSB_JOBINDEX $j $maxFail
    let j=j+1
done

这里的最终想法是为1,... numTreatments,numSims作业(模拟)中的每一个提交.我想一次运行两个工作(%2).输出的格式为XX_indexNumber_simNumber,其中indexNumber从1开始运行,...,numTreatments以及从1开始的simNumber,...,numSims.

理想情况下,作为此脚本的一部分提交的所有内容都具有相同的作业ID.这尚未正确设置,因为具有相同作业的所有作业j都被分配了不同的作业ID.我的直接问题是another_script.sh没有识别$LSB_JOBINDEX为输入 - 它看到$j并且$maxFail作为第一个也是唯一两个传递的参数.当我用一些其他变量代替时$LSB_JOBINDEX,没有问题.我究竟做错了什么?


编辑 -有些事情我已经试过:"$LSB_JOBINDEX",${LSB_JOBINDEX},%I,和I=$LSB_JOBINDEX; bsub ... $I $j $maxFail

Rei*_*eek 6

这个链接:

上面的定义不仅会启动一个批处理作业,而且会启动100个批处理作业,其中subjob特定的环境变量$ LSB_JOBINDEX从1到100获取值.然后可以在实际的作业启动命令中使用此变量,以便处理每个子任务.

在您的情况下,这意味着该变量$LSB_JOBINDEX可从脚本内部获得another_script.sh.您不需要将其作为参数传递,而只需$LSB_JOBINDEX在脚本中进行访问.