Как скрипт может определить, доступна ли платформа LSF в среде?

У нас есть некоторые сценарии оболочки, которые в настоящее время используют платформу LSF для управления выполнением задания.

Эти сценарии в конечном итоге будут перенесены в среду, в которой используется другой планировщик заданий.

Во время фазы миграции было бы идеально иметь тот же график планирования поддержки скриптов в обеих средах, поэтому, если он обнаруживает, что среда 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 

Я не знаю, достаточны ли эти проверки или есть ли более эффективный (как и менее хакерский) более надежный метод обнаружения наличия платформы LSF в системе.

Прошло несколько лет с тех пор, как я в последний раз использовал LSF, но первая команда, упомянутая в «Руководстве пользователя партии LSF» (версия 3.2), – это lsid , в котором будут отображаться имя кластера и имя главного хоста, как а также версию LSF, которая установлена.

Я считаю, что проверка этой команды, а также нескольких общедоступных пользовательских утилит, таких как bsub и bjobs будет хорошим способом обнаружения LSF. Я не знаю ни одного другого программного обеспечения для планирования, которое имеет это трио утилит (но я не эксперт).

Чтобы проверить, находится ли команда в текущем пути, не используйте. Вместо этого используйте command -v (см. « Почему бы не использовать», который «? Что использовать тогда? »):

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