我目前正在使用 Platform LSF 的 bsub 作业提交系统。我需要提交作业脚本,但我遇到了将参数传递给作业脚本的问题。
我需要的内容如下:作业脚本是一个 bash 脚本,它接受一个命令行参数。我需要将参数传递给该脚本,然后将要用作输入的脚本重定向到 bsub。问题是该参数没有应用于脚本。
我试过了: bsub < script.bsub 1
script.bsub 是我的脚本,1 是数字参数。这种方法行不通。1 被视为 bsub 的参数。
另一种方法:bsub < "script.bsub 1"
这种方法使 bsub 将整个双引号行视为文件名。
有没有办法先将命令行参数应用于脚本,然后将该脚本与参数重定向到另一个程序作为输入?如果有人对 bsub 有经验,那就更好了。
更新和解决方法:
似乎将命令行参数应用于 bsub 文件是一个非常复杂的过程。我尝试了下面所述的 HEREDOC 方法,但 bsub 的行为好像脚本文件名是一个命令。所以解决这个问题的最简单方法就是根本不使用输入重定向。
要将参数传递给要在 bsub 中运行的脚本,首先要在命令行中而不是在脚本文件中指定所有 bsub 参数。然后运行脚本文件,使用
"sh script.sh [arg]"
Run Code Online (Sandbox Code Playgroud)
在所有 bsub 参数之后。因此,整行看起来像:
bsub -q [queue] -J "[name]" -W 00:10 [other bsub args] "sh script.sh [script args]"
Run Code Online (Sandbox Code Playgroud)
这不能回答我最初的问题,但至少对于 bsub,这是解决我的问题的最简单方法。
我有很多在 lsf 上运行的 bjob,作业有两种状态,RUN 和 PEND。我想杀死所有处于 PEND 状态的 bjobs,如何使用脚本来做到这一点?我认为一种硬编码方式是将它们保存在一个文件中,然后解析每一行以获取状态和键。如果 STAT 为 PEND,则将密钥传递给bkill $key
。但这很复杂,是否有任何 bkill 函数可以直接执行此操作或以非硬编码方式杀死具有特定状态或名称的作业?