跳到主要内容

esub

当用户提交job时,可以用esub脚本管控用户提交任务。使用esub脚本可以在job提交时验证job参数,并选择接受/修改/拒绝job。esub脚本会在提交节点上运行。

注意

目前esub按照以下顺序检查,并且使用第一个找到的文件:

  • 固定位置的/etc/wrappers/esub
  • LSF_SERVERDIR目录下的esub文件

原理

用户使用bsub提交命令时,bsub会检查固定位置的esub脚本,如果存在则调用esub脚本。会执行该脚本,并传递一些环境变量给esub脚本,esub脚本可以根据这些环境变量来决定是否接受/修改/拒绝job。 根据esub的退出码,bsub会决定是否接受/修改/拒绝job。

  • 如果esub脚本返回0,则接受job,并执行参数更新。
  • 如果esub脚本返回LSF_SUB_ABORT_VALUE,则拒绝job。
  • 如果esub脚本返回其它值,则使用原始参数提交job。

部署方法

  1. 安装lsf-wrapper,导入环境变量
  2. 放置esub脚本到$LSF_SERVERDIR/esub/etc/wrappers/esub
  3. 之后用bsub命令提交任务时会受到esub脚本限制

esub使用的环境变量

  • LSF_INVOKE_CMD:调用esub脚本的命令名,目前只支持bsub
  • LSB_SUB_ABORT_VALUE: 如果希望拒绝该job,需要在esub脚本中指定exit $LSB_SUB_ABORT_VALUE
  • LSB_SUB_PARM_FILE: bsub的参数会存储到这个文件,esub脚本在job提交时读取该文件,然后可以根据参数选择接受/修改/拒绝job。可使用的参数在下一章节esub使用的参数中指定
  • LSB_SUB_MODIFY_FILE: 如果希望修改job参数,可以使用esub脚本把新的选项值写入该文件。可使用的参数在下一章节esub使用的参数中指定
  • LSB_SUB_MODIFY_ENVFILE: 如果希望修改用户环境变量,可以使用esub脚本把新的环境变量写入该文件

esub使用的参数

目前支持的参数如下:

参数esub变量名用途
-e, -eoLSB_SUB_ERR_FILE标准错误文件路径
-o, -ooLSB_SUB_OUT_FILE标准输出文件路径
-iLSB_SUB_IN_FILE标准输入文件路径
-WLSB_SUB_RLIMIT_RUN运行时长限制
-nLSB_SUB_NUM_PROCESSORS任务数量
-RLSB_SUB_RES_REQ资源申请参数 -R
-bLSB_SUB_BEGIN_TIME指定任务开始时间
-tLSB_SUB_TERM_TIME指定任务强制结束时间
-xLSB_SUB_EXCLUSIVE独占节点
-wLSB_SUB_DEPEND_COND前置任务条件
-ELSB_SUB_PRE_EXECprelog脚本路径
-EpLSB_SUB_POST_EXECpostlog脚本路径
-JLSB_SUB_JOB_NAME任务名称
-PLSB_SUB_PROJECT_NAME项目名称
-GLSB_SUB_USER_GROUPfairshare用户组名
-qLSB_SUB_QUEUE队列名/分区名
-IsLSB_SUB_PTY_SHELL是否申请PTY Shell
-IpLSB_SUB_PTY是否申请PTY
-LLSB_SUB_LOGIN_SHELL是否使用Login Shell
-JdLSB_SUB_JOB_DESCRIPTION任务描述

esub脚本示例

检查用户是否指定Project (-P), 如果没有拒绝

#!/bin/bash

source ${LSB_SUB_PARM_FILE}

# abort the job if mandatory parameter is missing
if [ -z "${LSB_SUB_PROJECT_NAME}" ]; then
echo "Error: Mandatory parameter '-P <project_name>' is missing."
echo "Please specify a project name using '-P' option when submitting jobs."
exit ${LSB_SUB_ABORT_VALUE}
fi

# continue the job
exit 0

检查用户是否指定Fairshare Group (-G), 如果没有拒绝

#!/bin/bash

source ${LSB_SUB_PARM_FILE}

# abort the job if mandatory parameter is missing

if [ -z "${LSB_SUB_USER_GROUP}" ]; then
echo "Error: Mandatory parameter '-G <account_name>' is missing."
echo "Please specify an account name using '-G' option when submitting jobs."
exit ${LSB_SUB_ABORT_VALUE}
fi

# continue the job
exit 0