【问题标题】:Referencing job index in LSF job array引用 LSF 作业数组中的作业索引
【发布时间】:2012-06-26 17:36:33
【问题描述】:

我正在尝试将作业数组中的作业索引作为参数传递给另一个 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 开始,simNumber 从 1,...,numSims 开始。

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


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

【问题讨论】:

  • 我看不到$LSB_JOBINDEX 的设置位置。由于它是空的且未引用,就好像它根本不存在,这与您报告的行为一致。
  • 据我了解,LSB_JOBINDEX 是自动为作业数组定义的,例如 herehere
  • 好吧,那么由于某种原因它不是。无论如何,我建议在它和其他变量周围加上引号。
  • 用我尝试过的一些替代方法更新了问题。
  • 我没有使用 bsub 的经验,但从您发送的链接来看,$LSB_JOBINDEX 似乎是通过环境进行通信的,并且可以从 在新工作中访问.您是否尝试从another_script.sh 内部访问$LSB_JOBINDEX,而不将其作为参数传递?

标签: bash jobs hpc lsf


【解决方案1】:

来自this link

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

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

【讨论】:

  • 再次感谢。在查看了$LSB_JOBINDEX 的六个简单用法后,我没有给好的描述一个公平的机会。这一课应该渗透到第一个链接的设计者...
  • 也可以在命令本身中扩展$LSB_JOBINDEX,但不幸的是我没有在命令参数中做到这一点:stackoverflow.com/questions/55472377/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
相关资源
最近更新 更多