控制作业 LSF 常用控制命令 命令 功能 bjobs 查看自己未结束的作业 bjobs -l JOBID 查看某个未结束作业的详情 bhist 查看自己已结束的历史作业 bhist -l JOBID 查看某个已结束历史作业的详情 bpeek JOBID 查看正在运行某个作业的stdout/stderr bkill JOBID 终止某个作业 btop JOBID 设置作业最先运行 bbot JOBID 设置作业最后运行 作业状态 bjobs命令的作业状态可能值包括: 状态 描述 PEND 作业正在等待中。也就是说,作业尚未开始。 PROV 作业已被派发到一个正在唤醒的节能状态主机。在作业可以发送到 sbatchd之前,它处于PROV状态。 PSUSP 作业在等待期间被挂起,可能是作业所有者或LSF管理员操作的。 RUN 作业当前正在运行。 USUSP 作业在运行期间被挂起,可能是作业所有者或LSF管理员操作的。 SSUSP 作业被LSF挂起。 DONE 作业以状态0终止。 EXIT 作业以非零状态终止。 UNKWN 一般是两种情况之一,如果作业状态长时间处于UNKWN状态,一般来 说就是计算节点坏了可以直接杀掉作业。①因为计算节点负载过高,未 能及时获取作业状态导致状态未知,这种情况一般只需要等待即可,待 负载下降获取状态后就正常了。②因为计算节点出现故障且长时间未恢 复,调度系统无法获取作业状态,此时如果登录不到相应的计算节点, 可以直接杀掉作业。 WAIT 对于提交到块作业队列的作业,块作业中的成员正在等待运行。 ZOMBI ①当sbatchd在执行主机上不可达时,非可重新运行的作业被 bkill杀死, 并且作业显示为UNKWN。 ②运行可重新运行作业的主机不可用,并且LSF 已将作业重新排队,分配了新的作业ID,就像提交了新作业一样。 ③在执 行主机可用之后,LSF尝试杀死ZOMBI作业。ZOMBI作业成功终止后,作业 的状态将更改为EXIT。 使用MultiCluster时,当在远程执行群集上运行的作 业变为ZOMBI作业时,执行群集将像本地ZOMBI作业一样处理该作业。此外, 它还会通知提交群集作业处于ZOMBI状态,并且提交群集将重新排队作业。 作业等待 bwait -w "wait_condition" [-t timeout] 暂停并等待作业条件满足,不满足一直暂停等待,满足则执行完毕返回。 典型用法:在脚本中不要循环使用bjobs判断作业状态,而用bwait等待作业运行完成,这样更优雅且能显著降低对集群的压力。 -w wait_condition:要满足的等待条件,此表达式与上述 bsub -w选项的格式相同。 -t timeout:等待条件的超时,范围为1-525600分钟,默认为一年。 Slurm 常用控制命令 命令 功能 squeue --me (或 squeue -u $USER) 查看自己正在排队或运行的未结束作业 scontrol show job JOBID 查看某个未结束作业的详细配置(如分配节点、环境变量、资源限制等) sacct 查看自己历史作业的简要信息 sacct -j JOBID -l 查看某个已结束历史作业的详细统计信息(包括内存峰值、CPU使用效率、退出状态等) tail -f slurm-JOBID.out 查看正在运行作业的标准输出(注:Slurm 没有直接对应的 bpeek,通常直接查看其定义的输出文件即可) scancel JOBID 终止某个作业 scancel -u $USER 终止属于该用户的所有作业(排队与运行中的) scontrol top JOBID 请求将处于排队状态的作业置于队列顶部(需系统配置允许,仅影响自己的作业优先级排序) scontrol hold JOBID 挂起作业(暂停排队) scontrol release JOBID 解除挂起(允许作业继续排队调度) 作业状态 squeue 或 sacct 命令输出中的状态标识(通常简写为两个字母)可能包括以下常见值: 状态 (简写) 描述 PENDING (PD) 作业正在等待资源分配。即作业仍在排队中尚未开始。 CONFIGURING (CF) 资源已被分配,但计算节点正在启动或配置环境(例如从节能模式唤醒)。 RUNNING (R) 作业当前正在计算节点上运行。 COMPLETING (CG) 作业正在结束,系统正在回收资源和清理进程。 COMPLETED (CD) 作业以状态 0 成功终止(所有进程均正常退出)。 FAILED (F) 作业以非零状态终止,或其他严重错误导致运行失败。 CANCELLED (CA) 作业被用户或管理员手动取消(如使用 scancel 命令)。 TIMEOUT (TO) 作业运行时间超过了申请的限制时间 ( -t),被调度器强制终止。 OUT_OF_MEMORY (OOM) 作业使用的内存超出了申请的上限,被系统内核 OOM Killer 杀掉。 SUSPENDED (S) 作业在运行期间被挂起。通常是因为高优先级作业抢占资源,或管理员手动操作。 NODE_FAIL (NF) 作业所在节点发生硬件故障或失联导致作业非正常终止。 UNKNOWN (UN) 调度系统无法获取作业状态。一般是因为计算节点长时间故障或与控制节点断开连接。此时如果登不上计算节点,可以直接 scancel 杀掉作业。 作业等待与依赖控制 在 LSF 中存在独立的 bwait 工具。在 Slurm 中,严禁在 Shell 脚本中使用 while 循环加 squeue 的方式高频轮询作业状态,这会对调度器数据库造成灾难性的压力。 请使用以下优雅的标准替代方案: 提交并阻塞等待 ( --wait) 如果你希望在终端或外部脚本中提交作业后挂起,直到该作业执行完毕才继续往下走,请在提交时添加 -W, --wait 选项: sbatch -W job.slurm 此命令会一直挂起,直到 job.slurm 执行完毕(无论成功或失败)才会返回终端提示符。 利用调度器依赖树 ( --dependency) 如果你有一个作业 B 必须在作业 A 完成后才能运行,应在提交作业 B 时声明依赖关系交由系统管理: # 假设提交作业 A 后返回的 JOBID 为 10001 sbatch --dependency=afterok:10001 job_B.slurm 作业 B 会被调度器以 Dependency 的原因置于 PENDING 状态。作业 A 成功结束后,B 才会开始参与资源调度分配。 脚本中等待已经运行的作业 (伪作业阻塞法) 如果确实需要在一个独立的 Shell 脚本中阻塞等待一个已经提交并正在运行的作业(例如 JOBID 10001)结束,可以向系统提交一个零操作的极轻量级伪作业,并配合 --wait: sbatch -W --dependency=afterany:10001 --wrap="exit 0" 此时当前 Shell 脚本将暂停。一旦 10001 结束,这个包装作业会被立刻触发执行并瞬间结束,Shell 脚本随之恢复运行。这完美替代了 bwait 功能且对集群完全无害。