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

时间:2012-06-26 17:36:34

标签: 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,......,numTreatmentsnumSims工作(模拟)中的每一项提交。我想一次运行两个工作(%2)。输出的格式为XX_indexNumber_simNumber,其中indexNumber从1,...,numTreatments和1,...,numSims的simNumber运行。

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


编辑 - 我尝试过的一些事情:"$LSB_JOBINDEX"${LSB_JOBINDEX}%II=$LSB_JOBINDEX; bsub ... $I $j $maxFail

1 个答案:

答案 0 :(得分:6)

来自this link

  

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

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