脚本如何判断 Platform LSF 在环境中是否可用?

脚本如何判断 Platform LSF 在环境中是否可用?

目前,我们有一些利用 Platform LSF 来管理作业执行的 shell 脚本。

这些脚本最终将迁移到使用不同作业调度程序的环境。

在迁移阶段,理想的情况是在两个环境中使用相同的脚本支持作业调度,因此如果它检测到 LSF 环境存在,则它使用 LSF 特定的指令,否则它使用与其他环境相关的命令。

我想到了一些可能的解决方案:

  • 检查 LSF 特定的环境变量

    例如$LSF_BINDIR, $LSF_LIBDIR,$LSF_SERVERDIR

    if [[ -n $LSF_BINDIR ]]; then
      # Yes LSF
    else
      # No LSF
    fi
    
  • 检查 LSF 特定命令的可用性

    例如which bsub, which bhosts,which bjobs

    if [[ -z $( which bsub 2>&1 | grep "/usr/bin/which" ) ]]; then
      # LSF present
    else
      # LSF absent
    fi
    

我不知道这些检查是否足够,或者是否有更好的(如更少的 hacky)、更可靠的方法来检测系统上是否存在 Platform LSF。

答案1

距离我上次使用 LSF 已经有几年了,但是《LSF 批量用户指南》(版本 3.2)中提到的第一个命令是lsid,它还会显示集群的名称和 master 主机的名称作为安装的 LSF 版本。

我认为检查此命令以及一些常用的用户实用程序(例如 和 )bsubbjobs是检测 LSF 的好方法。我不知道任何其他调度软件具有这三个实用程序(但我不是专家)。

要检查命令是否位于当前路径中,请勿使用which.使用command -v代替(参见“为什么不用“哪个”呢?那该用什么呢?”):

if (command -v lsid && command -v bsub && command -v bjobs) >/dev/null; then
   echo "LSF seems to be available"
fi

相关内容