esub脚本如下:
#!/bin/sh . $LSB_SUB_PARM_FILE # Redirect stderr to stdout so echo can be used for error messages exec 1>&2 if [[ "$LSB_SUB_QUEUE" = "dft_hui" || "$LSB_SUB_QUEUE" = "dft_han" || "$LSB_SUB_QUEUE" = "dft_q" || "$LSB_SUB_QUEUE" = "dft_felix"|| "$LSB_SUB_QUEUE" = "dft_sytrons" ]] then #==================================================================================== # bsub command is restricted to run only with -R #==================================================================================== if [ "${LSB_SUB_RES_REQ}" = "" ]; then echo "+-----------------------------------------------------------------------+" echo "| bsub -R <resource> is required to submit a job |" echo "| |" echo "| |" echo "| For example: |" echo "| |" echo "| bsub -R \"rusage[mem=xyz]\" myjob |" echo "| |" echo "| xyz means memory to reserve (MB) |" echo "+-----------------------------------------------------------------------+" exit $LSB_SUB_ABORT_VALUE fi #==================================================================================== # ================================================================================= # bsub -R command is required to reserve memory with "rusage" # # ================================================================================== ckmem=`echo $LSB_SUB_RES_REQ|awk '{if($0 ~ /mem/) {print "CKMEM"}}'` ckuse=`echo $LSB_SUB_RES_REQ|awk '{if($0 ~ /rusage/) {print "CKUSE"}}'` if [ "${ckmem}" = "" ]; then echo "+-----------------------------------------------------------------------+" echo "| \"rusage\" is required for memory reservation to submit a job |" echo "| |" echo "| |" echo "| For example: |" echo "| |" echo "| bsub -R \"rusage[mem=xyz]\" myjob |" echo "| |" echo "| xyz means memory to reserve (MB) |" echo "+-----------------------------------------------------------------------+" exit $LSB_SUB_ABORT_VALUE fi if [ "${ckuse}" = "" ]; then echo "+-----------------------------------------------------------------------+" echo "| \"rusage\" is required for memory reservation to submit a job |" echo "| |" echo "| |" echo "| For example: |" echo "| |" echo "| bsub -R \"rusage[mem=xyz]\" myjob |" echo "| |" echo "| xyz means memory to reserve (MB) |" echo "+-----------------------------------------------------------------------+" exit $LSB_SUB_ABORT_VALUE fi fi
这个脚本检查提交到queue1、queue2、queue3这三个队列的作业是否指定了-R “rusage[mem=xxx]”选项来设置内存预订, 如果没有就通过“exit $LSB_SUB_ABORT_VALUE”退出脚本并拒绝提交作业,同时显示提示信息。其它队列的作业不受影响。
$LSB_SUB_MEM_USAGE变量仅限于检查-R的“rusage[mem=xxx]”设置,不检查-R的别的设置。
上面三个队列不能是默认队列。如果是默认队列, $LSB_SUB_QUEUE变量为空(LSF不设置这个变量),就需要对脚本做相应调整。
有关配置如下:
1、将上述esub脚本(文件名为esub.memusage)放到$LSF_SERVERDIR 目录(/eda/ibm/10.1/linux2.6-glibc2.3-x86_64/etc)下,并设置可执行权限。
[ray.chen@etx2 ~]$ bsub -Is -q queue1 hostname
Cannot find a corresponding ‘esub’ or ‘epsub’ file in </eda/ibm/10.1/linux2.6-glibc2.3-x86_64/etc> for the <memusage> application.
Request aborted by esub. Job not submitted.
2、在lsf.conf里配置LSB_ESUB_METHOD=”memusage”。如果修改了这个esub脚本的扩展名memusage, 那么lsf.con里配置的LSB_ESUB_METHOD参数的值也要保持一致。
按照上述方法配置后,这个esub脚本就立即生效了,不需要执行badmin reconfig或重启LSF服务。我们来测试一下这个esub脚本的效果。
向queue1提交一个作业,不指定-R “rusage[mem=xxx””选项:
$ bsub -q queue1 sleep 10
ERROR: Please add -R “rusage[mem=xxx]” to bsub command line.
Request aborted by esub. Job not submitted.