Bedic 全文索引

搜索公开内容

知识库WIKI

bsub命令速查

更新
阅读
18 分钟
分类
软件工具

bsub命令速查


一、bsub 命令概述

bsub 是 LSF(Load Sharing Facility)作业管理系统的核心命令,用于向集群提交作业。提交作业时需要声明资源需求(CPU、内存、运行时间等)和执行内容(命令或脚本),LSF 负责在合适的节点上调度执行。


二、bsub 选项速查表

2.1 资源需求类

选项 说明 示例
-n N 请求 N 个 CPU 核心(slot) bsub -n 8 ./myjob
-n N,M 最少 N 个,最多 M 个核心 bsub -n 4,8 ./myjob
-R "rusage[mem=M]" 每个核心预留 M MB 内存 bsub -R "rusage[mem=4096]" ./myjob
-R "rusage[mem=M1:mem=M2]" 多个节点的不同内存需求 bsub -R "rusage[mem=4096:mem=8192]"
-R "rusage[swp=S]" 每个核心预留 swap 空间 bsub -R "rusage[swp=2048]"
-R "rusage[tmp=T]" 每个核心预留 /tmp 空间 bsub -R "rusage[tmp=10240]"
-R "select[expr]" 节点选择条件 bsub -R "select[os==linux64]"
-R "order[expr]" 节点排序条件 bsub -R "order[r15s]"
-R "span[ptile=N]" 每个节点最多分配 N 个核心 bsub -R "span[ptile=4]"
-R "span[hosts=1]" 所有核心必须在同一节点 bsub -R "span[hosts=1]"
-R "affinity[core]" 启用 CPU 亲和性绑定 bsub -R "affinity[core]"
-M M 作业总内存上限(MB),超限即 kill bsub -M 8192 ./myjob
-W HH:MM 作业 walltime 上限,超时自动终止 bsub -W 12:00 ./myjob
-W [HH:]MM 分钟格式的时间上限 bsub -W 120 ./myjob
-c CPU_Time/Host_Time CPU 时间上限(格式同上) bsub -c 10:00/12:00
-app app_profile 使用预定义的应用资源模板 bsub -app fluent ./myjob
-gpu - 请求 GPU 资源 bsub -gpu - -n 4 ./myjob
-gpu "num=2:mode=exclusive_process" 请求 2 个 GPU,独占模式 bsub -gpu "num=2:mode=exclusive_process"
-m "hostA hostB" 指定候选节点列表 bsub -m "node01 node02" ./myjob
-x 独占执行节点(整个节点只跑此作业) bsub -x -n 16 ./myjob
-R "type==TYPE" 指定节点资源类型 bsub -R "type==any"

2.2 输出与日志类

选项 说明 示例
-o file 标准输出重定向到文件(追加) bsub -o output.log ./myjob
-e file 标准错误重定向到文件(追加) bsub -e error.log ./myjob
-oo file 标准输出重定向到文件(覆盖) bsub -oo output.log ./myjob
-eo file 标准错误重定向到文件(覆盖) bsub -eo error.log ./myjob
-J "job_name" 作业名称(最多 4094 字符) bsub -J "top_sim_v2" ./myjob
-J "name[1-100]" 作业数组名称 bsub -J "myarray[1-100]"
-N 作业完成后发邮件通知 bsub -N -u user@company.com ./myjob
-u addr 指定邮件通知地址 bsub -u user@company.com ./myjob
-B 作业开始运行时发邮件通知 bsub -B -N ./myjob
-f "file1 > file2" 文件传输(作业完成后复制文件到指定位置) bsub -f "result.log > /shared/result.log"

输出文件名中的特殊变量:

变量 含义
%J 作业 ID
%I 作业数组索引(仅在作业数组中有效)
%JG 作业组名(如果指定了 -g
%P 作业所运行的队列名

2.3 依赖关系类

选项 说明 示例
-w "done(id)" 只有前驱作业成功完成才运行 bsub -w "done(12345)" ./myjob
-w "ended(id)" 前驱作业结束(无论成败)即运行 bsub -w "ended(12345)" ./myjob
-w "exit(id)" 前驱作业以退出码 0 结束才运行 bsub -w "exit(12345)" ./myjob
-w "done(id) && done(id2)" 多个依赖 AND 逻辑 bsub -w "done(12345) && done(12346)"
-w "done(id) || done(id2)" 多个依赖 OR 逻辑 bsub -w "done(12345) || done(12346)"
-w "numdone(job_name, N)" 数组作业中至少 N 个完成 bsub -w "numdone(myarray, 5)"
-w "numended(job_name, N)" 数组作业中至少 N 个结束 bsub -w "numended(myarray, 5)"
-ti 作业依赖终止时间,超时自动取消依赖 bsub -ti 3600 -w "done(12345)"

2.4 队列与项目类

选项 说明 示例
-q queue_name 指定提交队列 bsub -q normal ./myjob
-q "q1 q2" 指定多个候选队列(按顺序尝试) bsub -q "normal priority" ./myjob
-P project_name 指定项目名(用于计费和统计) bsub -P "chip_tapout" ./myjob
-G group_name 指定用户组(用于 Fairshare) bsub -G "cad_group" ./myjob
-g job_group 指定作业组名 bsub -g "/groupA/subgroup" ./myjob
-sla sla_name 指定 SLA(服务等级协议) bsub -sla gold ./myjob

2.5 作业控制类

选项 说明 示例
-I 交互式提交:阻塞,输出直接到终端 bsub -I ./short_test
-Is 交互式 Shell:获得执行节点的伪终端 bsub -Is /bin/bash
-Ip 交互式提交,但输出不打印到终端 bsub -Ip ./myjob
-K 提交后等待完成,返回作业退出码 bsub -K ./myjob
-H 以 HOLD 状态提交(需手动释放) bsub -H ./myjob
-p priority 设置作业优先级(数值越大越高) bsub -p 100 ./myjob
-r 作业可被 rerun(节点故障时自动重跑) bsub -r ./myjob
-rn 作业不可被 rerun bsub -rn ./myjob
-L login_shell 指定提交时的登录 shell bsub -L /bin/tcsh ./myjob
-C core_limit 设置 core dump 文件大小上限 bsub -C 1024 ./myjob
-Ep cmd 作业开始前在提交节点执行的命令 bsub -Ep "cp data.in /tmp/" ./myjob
-Ee cmd 作业结束后在提交节点执行的命令 bsub -Ee "mail -s done user@co.com" ./myjob

2.6 环境与输入类

选项 说明 示例
-i file 从文件读取标准输入 bsub -i input.txt ./myjob
-is file 从文件读取标准输入(输入文件不随作业移动) bsub -is input.txt ./myjob
-env "VAR1=val1 [VAR2=val2]" 传递环境变量 bsub -env "PATH=/tools/bin:$PATH"
-F file 指定作业文件(脚本),与 < 等价 bsub -F job_script.sh
-Zs 使用安全提交模式,不继承环境变量 bsub -Zs < job_script.sh

2.7 作业数组类

选项 说明 示例
-J "name[start-end[:step]]" 定义作业数组 bsub -J "scan[1-100:2]"
-J "name[1,5,10,15]" 指定索引列表 bsub -J "scan[1,5,10,15]"
-t N 作业数组并发限制(同时最多 N 个运行) bsub -J "scan[1-100]" -t 10
%I 在命令中引用当前索引 bsub -J "scan[1-100]" -o "out.%I"
%J 在命令中引用作业 ID bsub -J "scan[1-100]" -o "out.%J.%I"
$LSB_JOBINDEX 脚本中获取当前索引(环境变量) echo "Index: $LSB_JOBINDEX"

2.8 高级选项

选项 说明 示例
-ar time 指定作业的自动释放时间 bsub -ar "2026-08-04T08:00:00"
-b time 指定作业开始时间(延迟提交) bsub -b "02:00" ./myjob
-ext "sched=pref[resource]" 调度偏好扩展 bsub -ext "sched=pref[license]"
-R "license[lic1=N]" 请求 N 个 License 资源 bsub -R "license[synopsys=2]"
-stage 作业文件暂存模式 bsub -stage ./myjob
-data 数据暂存 bsub -data "file_a" ./myjob
-jsdl file 使用 JSDL 文件描述作业 bsub -jsdl job.xml
-jsdl_strict file 严格 JSDL 模式 bsub -jsdl_strict job.xml

三、bsub 脚本内嵌指令(#BSUB)

在作业脚本中通过 #BSUB 注释行声明选项,与命令行选项功能完全一致:

#!/bin/bash
#BSUB -J top_simulation
#BSUB -q normal
#BSUB -n 16
#BSUB -R "rusage[mem=8192] span[hosts=1]"
#BSUB -W 24:00
#BSUB -o /shared/logs/%J.out
#BSUB -e /shared/logs/%J.err
#BSUB -N
#BSUB -u engineer@company.com
#BSUB -P chip_project

cd /shared/workdir
source /tools/setup.sh
./run_simulation --input testcase.v --output results/

提交方式:

# 方式一:重定向
bsub < job_script.sh

# 方式二:-F 选项
bsub -F job_script.sh

注意: #BSUB 指令必须从行首开始,#BSUB 与选项之间至少有一个空格。脚本开头的 #!/bin/bash 是必须的(或其他有效的 shell 解释器)。


四、配套管理命令详解

4.1 bjobs — 查看作业状态

这是日常使用频率最高的命令。

基础用法:

bjobs                  # 查看当前用户的所有作业(简要)
bjobs -a               # 查看所有作业(包括近期完成的)
bjobs -p               # 只显示 PEND(等待中)的作业
bjobs -r               # 只显示 RUN(运行中)的作业
bjobs -d               # 只显示 DONE(已完成)的作业
bjobs -s               # 只显示 SUSP(挂起)的作业
bjobs -u username      # 查看指定用户的作业
bjobs -u all           # 查看所有用户的作业
bjobs -q queue_name    # 查看指定队列中的作业
bjobs -J job_name      # 按作业名搜索
bjobs -m hostname      # 查看运行在指定节点上的作业

详细信息:

bjobs -l 12345         # 查看作业 12345 的完整详细信息
bjobs -l -p            # 查看所有 PEND 作业的详细信息
bjobs -l -u username   # 查看指定用户作业的详细信息

bjobs -l 输出解读:

Job <12345>, Job Name <top_sim>, User <engineer>, Project <chip_project>
                     Queue <normal>, Job Priority <50>
                     ...
PENDING REASONS:
 Load information unavailable on some hosts;           # 调度器在收集节点信息
 Not enough of the right type of hosts available;       # 没有满足条件的节点
                                                         # (资源不够或类型不匹配)

PEND 原因常见类型:

原因 含义
Not enough of the right type of hosts available 满足条件的节点不够
Not enough processors 空闲 CPU 核心不够
Not enough memory 空闲内存不够
License not available 请求的 License 不可用
User has reached the job slot limit 用户作业槽位达到上限
Job slot limit reached 队列或主机作业槽位上限
Waiting for dispatch 正在等待被调度
Dependency condition has not been satisfied 依赖作业未完成
Job held by user 作业被用户 HOLD

格式化输出:

bjobs -o "jobid stat user queue job_name start_time finish_time"              # 自定义列
bjobs -o "jobid stat user queue job_name submit_time pend_reason" -p          # 查看 PEND 原因
bjobs -o "jobid:7 stat:4 user:10 queue:10 job_name:20"                        # 自定义列宽

可用字段(部分常用): jobid, stat, user, queue, job_name, project_name, submit_time, start_time, finish_time, run_time, cpu_used, mem, max_mem, swap, max_swap, slot, exec_host, pend_reason, exit_code, from_host, command

作业数组查看:

bjobs -J "myarray[1-100]"         # 查看数组所有元素
bjobs -J "myarray[1-100]" -l      # 查看数组详细信息
bjobs -A                          # 按数组汇总显示

4.2 bkill — 终止作业

bkill 12345                       # 终止作业 12345(发送 SIGTERM 再 SIGKILL)
bkill -r 12345                    # 终止作业并向提交节点发送通知
bkill -s SIGKILL 12345            # 立即强制终止(不发送 SIGTERM)
bkill -s SIGUSR1 12345            # 发送自定义信号
bkill -b 12345                    # 终止 + 发邮件通知
bkill 0                           # 终止当前用户的所有作业
bkill -u username 0               # 终止指定用户的所有作业(需管理员权限)
bkill -J "job_name" 0             # 终止指定名称的所有作业
bkill -q queue_name 0             # 终止指定队列中的所有作业
bkill -g "/group_name" 0          # 终止指定作业组的所有作业
bkill -J "myarray[1-100]" 0       # 终止整个作业数组
bkill -J "myarray[1-100]" 5       # 终止数组索引 5

4.3 bhist — 查看作业历史

bhist                      # 查看近期作业历史(简要)
bhist -a                   # 查看所有作业历史
bhist -l 12345             # 查看作业 12345 的详细历史
bhist -l -n 50             # 查看最近 50 条历史
bhist -d                   # 只显示已完成的作业
bhist -e                   # 只显示异常的作业
bhist -u username          # 查看指定用户的历史
bhist -t 2026/08/01        # 从指定日期开始查看
bhist -S 2026/08/01        # 查看指定日期之后的作业
bhist -E 2026/08/03        # 查看指定日期之前的作业
bhist -S 2026/08/01 -E 2026/08/03  # 查看指定日期范围的作业
bhist -c 30:00             # 查看 CPU 耗时超过 30 小时的作业
bhist -w                   # 宽格式输出

bhist -l 输出关键信息:

Job <12345>, User <engineer>, Project <chip_project>, Status <DONE>
Queue <normal>, Command <./run_sim.sh>
Submit Time <Mon Aug  3 09:00:00 2026>
Start Time  <Mon Aug  3 09:05:23 2026>
Finish Time <Mon Aug  3 15:30:45 2026>
Run Time    <06:25:22>
CPU Time    <102.5 hours>    (多核累计)
Max Memory  <7.2 GB>         (峰值内存)
Max Swap    <0.5 GB>
Exit Code   <0>

4.4 bhosts — 查看节点状态

bhosts                          # 查看所有节点状态(简要)
bhosts -l node01                # 查看节点 node01 的详细信息
bhosts -l                       # 查看所有节点的详细信息
bhosts -w                       # 宽格式输出
bhosts -o "host_name status njobs maxmem maxswp nprocs"  # 自定义列
bhosts -R "type==linux64"       # 按资源类型筛选
bhosts -m node01 node02 node03  # 只查看指定节点
bhosts -X                       # 显示节点状态变更时间

节点状态含义:

状态 含义
ok 正常可用,可以接受作业
closed 管理员关闭,不接受新作业,但已有作业继续运行
unavail 不可用(LIM 未响应或宕机)
unreach 网络不可达
closed_Full 节点资源已满
closed_Busy 节点负载过高
closed_Excl 被独占作业占用
closed_LIM LIM 进程异常
closed_Adm 管理员手动关闭
closed_Wind 正在关闭窗口中(等待作业完成)
closed_Unlic 缺少 License

bhosts -l 输出关键信息:

HOST_NAME: node01
STATUS:    ok
type       model        nprocs   ncpus    ncores   nthreads
X86_64     Intel_E5     16       16       16       32

LOAD:
 r15s   r1m    r15m   ut      pg     io    ls    it    tmp    swp    mem
 0.5    0.8    0.6    5%      0.0    50    10    0     100G   20G    50G
  • r15s/r1m/r15m:15 秒/1 分钟/15 分钟平均负载
  • ut:CPU 利用率
  • mem:总内存
  • swp:总 swap
  • tmp/tmp 可用空间
  • pg:换页速率
  • io:磁盘 IO 速率

4.5 bqueues — 查看队列配置

bqueues                       # 查看所有队列(简要)
bqueues -l normal             # 查看 normal 队列的详细配置
bqueues -l                    # 查看所有队列的详细配置
bqueues -u username           # 查看用户可用的队列
bqueues -m node01             # 查看覆盖 node01 的队列

bqueues -l 输出关键配置项:

配置项 含义
PRIORITY 队列优先级
NICE 优先级调整值
MAX_JOBS 最大作业数
UJOB_LIMIT 每用户最大作业数
PJOB_LIMIT 每处理器最大作业数
RUNLIMIT 作业运行时间上限
PROCLIMIT 每作业处理器数上限
MEMLIMIT 每作业内存上限
SWAPLIMIT 每作业 swap 上限
USERS 允许的用户列表
HOSTS 队列覆盖的节点
PREEMPTION 抢占策略
FAIRSHARE 公平共享策略
CHUNK_JOB_SIZE 作业块大小
ADMINISTRATORS 队列管理员
PRE_EXEC 作业执行前运行的命令
POST_EXEC 作业执行后运行的命令
REQUEUE_EXIT_VALUES 触发重新排队的退出码
JOB_STARTER 作业启动器

4.6 bpeek — 实时查看作业输出

bpeek 12345              # 查看作业 12345 的当前输出
bpeek -f 12345           # 持续查看(类 tail -f),Ctrl+C 退出
bpeek -f -n 100 12345    # 持续查看,初始显示最后 100 行
bpeek -o 12345           # 查看标准输出
bpeek -e 12345           # 查看标准错误

注意: bpeek 只能查看正在运行的作业。对于已完成的作业,直接查看 -o/-e 指定的日志文件。

4.7 bacct — 作业资源统计

bacct 12345                    # 查看作业 12345 的资源使用统计
bacct -l 12345                 # 详细统计
bacct -u username              # 按用户统计
bacct -P project_name          # 按项目统计
bacct -q queue_name            # 按队列统计
bacct -C 2026/08/01            # 从指定日期开始统计
bacct -D 7                     # 最近 7 天的统计
bacct -S 2026/08/01 -E 2026/08/03  # 指定日期范围

bacct -l 输出关键信息:

Accounting information about Job <12345>:
  CPU_T:    102.5 hours          (总 CPU 时间)
  MEM:      7.2 GB               (峰值内存)
  SWAP:     0.5 GB               (峰值 swap)
  RUN_TIME: 6.4 hours            (walltime)
  TURNAROUND: 6.5 hours          (从提交到完成的总时间)
  EXIT_CODE: 0

4.8 bresize — 调整运行中作业的资源

bresize -n 16 12345         # 将作业 12345 的核心数调整为 16
bresize -W 48:00 12345      # 将 walltime 延长到 48 小时
bresize -M 16384 12345      # 调整内存上限
bresize -R "rusage[mem=8192]" 12345  # 调整资源需求
bresize -gpu "num=2" 12345  # 调整 GPU 需求

注意: 通常只能扩大,不能缩小;且受限于管理员配置和当前可用资源。

4.9 bstop / bresume — 挂起与恢复作业

bstop 12345                 # 挂起作业 12345
bstop -J "myarray" 0        # 挂起整个作业数组
bresume 12345               # 恢复作业 12345
bresume -J "myarray" 0      # 恢复整个作业数组

4.10 btop / bbot — 调整作业优先级

btop 12345                  # 将作业 12345 移到队列顶部
bbot 12345                  # 将作业 12345 移到队列底部
btop -u username 0          # 将某用户所有作业移到顶部
bbot -u username 0          # 将某用户所有作业移到底部

4.11 bswitch — 切换作业队列

bswitch normal 12345               # 将作业 12345 切换到 normal 队列
bswitch -J "myarray" normal 0      # 将整个数组切换到 normal 队列

4.12 bmod — 修改作业参数

bmod -J "new_name" 12345           # 修改作业名称
bmod -q normal 12345               # 修改队列
bmod -W 48:00 12345                # 修改 walltime(仅 PEND 状态可用)
bmod -n 16 12345                   # 修改 CPU 核心数(仅 PEND 状态)
bmod -R "rusage[mem=16384]" 12345  # 修改资源需求
bmod -Z "new_cmd" 12345            # 修改作业命令
bmod -ar "2026-08-04T08:00:00" 12345  # 修改自动释放时间
bmod -N -u user@co.com 12345       # 修改邮件通知
bmod -H -r 12345                   # 取消 HOLD 状态并释放作业

4.13 bsub 相关信息查询命令

bparams                          # 查看 LSF 配置参数
bparams -l                       # 详细配置
bparams -a                       # 查看所有配置

lshosts                          # 查看集群中所有主机的静态资源信息
lshosts -l node01                # 查看 node01 的静态资源详情

lsload                            # 查看集群中所有主机的动态负载信息
lsload -l node01                  # 查看 node01 的动态负载详情
lsload -I 5                       # 每 5 秒刷新一次

lsid                              # 查看 LSF 集群名称和 Master 节点
lsclusters                        # 查看所有 LSF 集群
lsinfo                            # 查看 LSF 系统和安装信息
lsmon                             # 查看 LSF 守护进程状态

bconf                             # 查看 LSF 配置
badmin                            # 查看集群管理信息
badmin showconf                   # 查看完整配置
badmin showstatus                 # 查看集群运行状态
badmin ckconfig                   # 检查配置一致性
badmin reconfig                   # 重新加载配置(需管理员权限)

busers                            # 查看用户资源使用统计
busers -l                         # 详细信息
busers -w                         # 宽格式
busers all                        # 查看所有用户的统计

bapp                              # 查看所有应用模板
bapp -l fluent                    # 查看 fluent 应用模板详情

blicenses                         # 查看 License 资源状态
blicenses -l synopsys             # 查看 synopsys License 详情

4.14 作业组管理

bjgroup -s /group_name            # 查看作业组状态
bjgroup -l /group_name            # 详细作业组信息
bgadd /group_name                 # 创建作业组
bgdel /group_name                 # 删除作业组
bgmod /group_name                 # 修改作业组

五、作业状态完整生命周期

                    ┌──────────────────────────────────────┐
                    │              PEND                     │
                    │  (等待调度,排队中)                    │
                    │  PEND 原因包括:                      │
                    │  - 资源不足                           │
                    │  - 依赖未满足                         │
                    │  - 用户/管理员 HOLD                   │
                    │  - 队列/用户槽位已满                  │
                    └──────────┬───────────────────────────┘
                               │  调度器分配资源
                               ▼
                    ┌──────────────────────────────────────┐
                    │              RUN                      │
                    │  (正在执行节点上运行)                  │
                    │                                       │
                    │  可能的中断状态:                      │
                    │  - PSUSP (管理员挂起)                  │
                    │  - USUSP (用户挂起)                    │
                    │  - SSUSP (系统自动挂起)                │
                    │  - WAIT (等待 dispatch)               │
                    └──────────┬───────────────────────────┘
                               │
                    ┌──────────┴───────────┐
                    ▼                      ▼
          ┌──────────────────┐   ┌──────────────────┐
          │      DONE        │   │      EXIT        │
          │  (正常完成)       │   │  (异常退出)       │
          │  exit code == 0  │   │  exit code != 0  │
          └──────────────────┘   └──────────────────┘
                                          │
                               ┌──────────┴───────────┐
                               ▼                      ▼
                     ┌──────────────────┐   ┌──────────────────┐
                     │  ZOMBI           │   │  UNKWN           │
                     │  (已被 kill       │   │  (状态未知)       │
                     │   但还在清理)     │   │  Master 联系不上   │
                     └──────────────────┘   │  执行节点)         │
                                            └──────────────────┘

状态速查:

状态 含义
PEND 等待调度
RUN 正在运行
DONE 正常完成
EXIT 异常退出
PSUSP 被管理员挂起(运行中)
USUSP 被用户挂起(运行中)
SSUSP 被系统自动挂起(如节点负载过高)
WAIT 等待 dispatch(已分配节点但未启动)
ZOMBI 僵尸状态(作业已终止但仍在清理)
UNKWN 状态未知(Master 与执行节点失联)

六、典型使用场景与命令组合

场景一:提交一个 EDA 仿真作业

bsub -q normal \
     -n 16 \
     -R "rusage[mem=8192] span[hosts=1]" \
     -R "license[synopsys=1]" \
     -W 24:00 \
     -J "top_sim_v2" \
     -o /shared/logs/%J.out \
     -e /shared/logs/%J.err \
     -P chip_project \
     -N -u engineer@company.com \
     ./run_simulation.sh

场景二:作业数组 — 参数扫描

# 提交 100 个任务,每个任务处理不同的输入文件
bsub -J "scan[1-100]" \
     -n 4 \
     -R "rusage[mem=4096]" \
     -W 2:00 \
     -o "scan_%I.out" \
     -e "scan_%I.err" \
     -t 10 \
     ./run_scan.sh \$LSB_JOBINDEX

# 脚本内使用:
# input_file="data_${LSB_JOBINDEX}.in"
# ./simulator --input $input_file

场景三:作业依赖链

# 先提交第一个作业
JOB1=$(bsub -J "compile" -n 4 -W 1:00 -o compile.out ./compile.sh | awk '/is submitted/{print $2}' | tr -d '<>')
echo "Compile job: $JOB1"

# 第二个作业依赖第一个
JOB2=$(bsub -J "simulate" -n 16 -W 12:00 -o sim.out \
       -w "done($JOB1)" ./simulate.sh | awk '/is submitted/{print $2}' | tr -d '<>')
echo "Simulate job: $JOB2"

# 第三个作业依赖第二个
bsub -J "report" -n 1 -W 1:00 -o report.out \
     -w "done($JOB2)" ./generate_report.sh

场景四:日常监控命令组合

# 查看自己有多少作业在跑、多少在排队
bjobs -u $USER -p -r | wc -l

# 查看所有 PEND 作业及其原因
bjobs -p -o "jobid:7 stat:4 queue:10 job_name:20 pend_reason"

# 查看哪些节点负载高
bhosts -o "host_name:10 status:6 njobs:6 r15s:6 r1m:6 r15m:6 mem:10"

# 找出自己占用资源最多的作业
bjobs -r -o "jobid:7 job_name:20 start_time:20 run_time:12"

# 实时监控某个作业
watch -n 5 'bjobs -l 12345 | grep -E "Status|PEND|RUN"'

场景五:批量终止和清理

# 终止所有 PEND 超过 24 小时的作业
bjobs -p -o "jobid" -u $USER | tail -n +2 | xargs bkill

# 终止所有某个队列的作业
bkill -q debug_queue 0

# 终止所有作业名包含 "test" 的作业
bjobs -J "test" -o "jobid" -u $USER | tail -n +2 | xargs bkill

# 终止所有 EXIT 状态失败的作业数组元素
bjobs -J "scan[1-100]" -o "jobid stat" | grep EXIT | awk '{print $1}' | xargs bkill

七、环境变量参考

LSF 在作业执行时会自动设置以下环境变量,可在作业脚本中直接使用:

环境变量 含义
$LSB_JOBID 当前作业 ID
$LSB_JOBINDEX 作业数组中的索引(仅数组作业)
$LSB_JOBNAME 作业名称
$LSB_QUEUE 作业所在队列
$LSB_PROJECT_NAME 项目名称
$LSB_HOSTS 分配给作业的主机列表
$LSB_MCPU_HOSTS 主机及其分配的 CPU 核心数
$LSB_MAX_NUM_PROCESSORS 请求的 CPU 核心数
$LSB_SUB_HOST 提交作业的主机名
$LSB_SUB_USER 提交作业的用户名
$LSB_EXEC_HOSTTYPE 执行节点类型
$LSB_OUTPUTFILE 标准输出文件路径
$LSB_ERRORFILE 标准错误文件路径
$LSB_JOB_START_TIME 作业开始时间
$LSB_SUB_COMMAND_LINE 提交的完整命令行
$LSB_AFFINITY_HOSTFILE CPU 亲和性主机文件

八、常用命令速查(按使用频率排序)

频率 命令 用途
★★★★★ bjobs 查看作业状态
★★★★★ bsub 提交作业
★★★★ bkill 终止作业
★★★★ bpeek 查看运行中作业输出
★★★ bhosts 查看节点状态
★★★ bhist 查看作业历史
★★ bqueues 查看队列配置
★★ bacct 查看资源统计
busers 查看用户使用统计
bswitch 切换队列
bmod 修改作业参数
bstop/bresume 挂起/恢复作业
btop/bbot 调整优先级
bresize 调整运行中作业资源

九、排查问题常用流程

作业一直 PEND

# 1. 查看 PEND 原因
bjobs -l <jobid> | grep -A 20 "PENDING REASONS"

# 2. 检查节点状态
bhosts -l

# 3. 检查队列限制
bqueues -l <queue_name>

# 4. 检查自己是否达到槽位上限
busers -l $USER

# 5. 查看是否有依赖未满足
bjobs -l <jobid> | grep -i depend

作业运行失败

# 1. 查看退出码
bjobs -l <jobid> | grep -i exit

# 2. 查看错误日志
cat error.log

# 3. 查看历史记录
bhist -l <jobid>

# 4. 查看资源是否超限
bacct -l <jobid> | grep -E "MEM|SWAP|RUN_TIME"

节点异常

# 1. 查看哪些节点不可用
bhosts | grep -v ok

# 2. 查看节点详情
bhosts -l <hostname>

# 3. 查看节点负载
lsload <hostname>

# 4. 查看节点静态资源
lshosts -l <hostname>