1

我有 shell 脚本,想禁用它作为正常工作的执行。它应该只作为 LSF 中的 bjob​​ 执行

如何在脚本中确保这一点

4

3 回答 3

2
lsfError="**ERROR: Local jobs disabled. Please run through LSF only --"
lsfExit=2
lsfLog="$(getent passwd $(id -un) | cut -d: -f6)/.lsbatch/.lsf_${LSB_JOBID}.log"
echo "**INFO: Verifying as LSF job ..."
sleep 2s
if [ -z "$LSB_JOBID" ]; then
  echo "$lsfError"; exit $lsfExit
elif [[ "$(bjobs $LSB_JOBID 2>&1)" =~ "not found" ]]; then
  echo "**ERROR: Job $LSB_JOBID doesn't exist" > $lsfLog
  echo "$lsfError"; exit $lsfExit
elif [[ "$(bjobs -o 'command' -noheader $LSB_JOBID 2>&1)" != "$0" ]]; then
  echo "**ERROR: Command not matched $(bjobs -o "command" -noheader $LSB_JOBID 2>&1) != $0" > $lsfLog
  echo "$lsfError"; exit $lsfExit
fi
于 2016-06-02T12:17:45.817 回答
0

LSF 会在作业环境中设置一些环境变量,例如$LSB_JOBID. 您可以编写脚本来检查是否定义了此环境变量。如果不是,请说明该脚本只能作为 LSF 作业运行,然后退出。

于 2016-05-15T11:40:02.827 回答
0

我猜您可能期望 LSF 作业由 启动,因此您可以检查同一进程组中res是否有进程,例如res

_pgid=`ps -o pgid --no-headers -p $$`
ps -o comm,pgid --no-headers | grep -qE '^res\s+'${_pgid// /}'$' || { echo "Must submit as LSF job!"; exit 1; }
于 2016-05-19T16:11:17.980 回答