如果配置单元失败,停止bash脚本

zxlwwiss  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(335)

我有一个bash脚本,它循环遍历一个文件夹并处理所有*.hql文件。有时一个配置单元脚本失败(语法、资源约束等),而不是脚本失败,它将继续运行到下一个.hql文件。
不管怎样,我可以阻止bash处理剩余的?下面是我的示例:

for i in `ls ${layer}/*.hql`; do
      echo "Processing $i ..."
      hive ${hiveconf_all} -hiveconf DATE=${date} -f ${i} &
    if [ $j -le 5 ]; then
       j=$(( j+1 ))
    else
      wait
      j=0
    fi
  done
q8l4jmvw

q8l4jmvw1#

添加

set -e

到你剧本的顶端

w6lpcovy

w6lpcovy2#

我将检查前一个命令的进程完成状态,并调用exit命令以退出循环

(( $? == 0 )) && exit 1

在hive命令之后引入上面的行,应该可以做到这一点。

jxct1oxe

jxct1oxe3#

使用此模板运行并行进程并等待其完成。添加您的 date , layer , hiveconf_all 以及其他变量:


# !/bin/bash

set -e

# Run parallel processes and write their logs

log_dir=/tmp/my_script_logs
for i in `ls ${layer}/*.hql`; do
      echo "Processing $i ..."
      #Run hive in parallel and redirect to the log file
      hive ${hiveconf_all} -hiveconf DATE=${date} -f ${i} 2>&1 | tee "log_dir/${i}".log &
done

# Now wait for all processes to complete

FAILED=0

for job in `jobs -p`
do
   echo "job=$job"
   wait $job || let "FAILED+=1"
done

if [ "$FAILED" != "0" ]; then
    echo "Execution FAILED!  ($FAILED)"
    #Do something here, log or send message, etc
    exit 1
fi

# All processes are completed successfully!

# Do something here

echo "Done successfully"

然后您将能够单独检查每个进程日志。

相关问题