Linux脚本学习案例shell脚本多通道并发执行存储过程

Posted cac2020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux脚本学习案例shell脚本多通道并发执行存储过程相关的知识,希望对你有一定的参考价值。

使用shell脚本开启多个子任务并发调用存储过程,存储过程按照通道处理数据,提高效率:

外层调用脚本:

#!/bin/sh
#--------------------------------------------------------------------
# Fuction:调用脚本
# Version: 1.0
#--------------------------------------------------------------------

. ~/.profile

. /web/interface/common/FuncCommon.def
#######################公共配置###############################################
#当前时间 yyyymmdd
CURDATE=`date +%Y%m%d%H%M%S`
#执行文件路径
BIN_PATH=~/interface
#日志文件
LOG_PATH=~/interface/log
#配置文件路径
INI_PATH=~/interface/ini/
#每次每通道处理数量
PER_NUM=500000

echo `date +%H\:%M\%S\"` "脚本PERIODIC_CALL.sh开始..."

vacgwms=`ps -ef|grep -v grep|grep PERIODIC_CALL.sh |wc -l`
if [ $vacgwms -gt 1 ]
then
echo `date +%H\:%M\%S\"` "上次PERIODIC_CALL.sh未结束..."
exit 0
fi


loop=0
while(($loop<50))
do

echo "通道:"$loop"开始......"
#1.先判断lock文件是否存在
cd $INI_PATH
if [ -e $loop_*.lock ]
then
echo "通道锁文件:"$loop.lock"仍然存在,上次存储执行未结束,下次调用再校验"
loop=`expr $loop + 1`
continue

else
#创建锁文件
LOCK_NAME=$loop_$CURDATE.lock
touch $LOCK_NAME
echo "通道锁文件:"$LOCK_NAME"创建成功"

#2.调用存储
#nohup sh $BIN_PATH/CORE_EXEC.sh $loop $PER_NUM >> /dev/null 2>$LOG_PATH/core.log &
nohup sh $BIN_PATH/CORE_EXEC.sh $loop $PER_NUM >> $LOG_PATH/core.log 2>&1 &
#nohup sh $BIN_PATH/CORE_EXEC.sh $loop $PER_NUM > /dev/null &
fi

loop=`expr $loop + 1`

done;

wait

echo `date +%H\:%M\%S\"` "脚本PERIODIC_CALL.sh结束..."

 

内层执行脚本:

#!/bin/sh
#--------------------------------------------------------------------
# Fuction:执行存储脚本
# Version: 1.0
#--------------------------------------------------------------------

. ~/.profile

ORACLE_HOME=/oracle/product/10.2.0/db
TNS_ADMIN=/ngbss/mddms/etc
export TNS_ADMIN
export ORACLE_HOME
. /web/interface/common/FuncCommon.def
#######################公共配置###############################################
#配置文件路径
INI_PATH=~/interface/ini/
#营业库连接
CONN=`/web/interface/passwd/pwd.sh CON_CC`
#短信配置
DEALDATE=`date +"%Y年%m月%d日%H时%M分"`

echo `date +%H\:%M\%S\"` "脚本CORE_EXEC.sh开始...通道:"$1",单次捞取数量:"$2
#1调用存储

RETINFO=`sqlplus -S $CONN << !
          set heading off
          set feedback off
          set pages 0
          set trimspool on
          set serverout off
          var V_RESULTCODE    NUMBER;
          var V_RESULTERRINFO VARCHAR2(500);
          call PROC_PP($1,$2,:V_RESULTCODE, :V_RESULTERRINFO);
          select :V_RESULTCODE ||,|| :V_RESULTERRINFO from dual;
       EXIT ;
       !`

echo "存储过程返回信息:" $RETINFO
#echo $RETINFO##*,
RESULTCODE1=`echo $RETINFO|cut -c1`
RESULTCODE2=`echo $RETINFO|cut -c1-2`
echo "RESULTCODE1:"$RESULTCODE1
echo "RESULTCODE2:"$RESULTCODE2

if [ $RESULTCODE1 == 0 ]
then
    #2 删除锁文件
  cd $INI_PATH
    if [ -e $1_*.lock ]
    then
        rm $1_*.lock
        echo 删除通道$1锁文件成功!
    else
        echo 未找到通道$1的锁文件
    fi
elif [ $RESULTCODE2 == -1 ]
then 
  #存储过程报错 需要发短信通知
    msg="ss2gnum#$DEALDATE停开2G:存储过程PROC_PP,通道$1报错:$RETINFO"
     echo $msg
  (
        sleep 1
        echo $msg
        sleep 1
        echo "quit"
    )| telnet $REMOTE_IP $REMOTE_PORT>./log/telnet_wls.log
fi



echo `date +%H\:%M\%S\"` "脚本CORE_EXEC.sh结束...通道:"$1",单次捞取数量:"$2

 

以上是关于Linux脚本学习案例shell脚本多通道并发执行存储过程的主要内容,如果未能解决你的问题,请参考以下文章

shell多个脚本怎么并发执行

Linux学习笔记:bash特性之多命令执行,shell脚本

linux学习—shell脚本知识点总结

Shell脚本中的多任务并发执行

linux shell 脚本的传参执行,简单案例

Shell多线程脚本