目前,我们有一些利用 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 版本。
我认为检查此命令以及一些常用的用户实用程序(例如 和 )bsub
将bjobs
是检测 LSF 的好方法。我不知道任何其他调度软件具有这三个实用程序(但我不是专家)。
要检查命令是否位于当前路径中,请勿使用which
.使用command -v
代替(参见“为什么不用“哪个”呢?那该用什么呢?”):
if (command -v lsid && command -v bsub && command -v bjobs) >/dev/null; then
echo "LSF seems to be available"
fi