监控进程运行 KSH

#!/usr/bin/ksh

#############################################

PROC_KEY='test_proc'        ## 查询程序命令信息
TMP_FILE=${PROC_KEY}.ps   ## 临时用ps查询出的程序信息

SLEEP_VAL=2               ## 每次检查的时间间隔(单位:秒)
PROCLIST=ProcMon.conf     ## 需要检查的程序配置文件( 程序名 参数1 ...)

#############################################
#
#  运行用户程序,参数=程序名+参数1+参数2
#
#############################################
function run_com
{
    echo " 运行程序:$1 $2 $3"
    exec $1 $2 $3 < /dev/null &
}
#############################################
#
# 比较字符串,相等返回0,否则-1
#
#############################################
function comp_str
{
   if [[ $1 != $4 || $2 != $5 || $3 != $6 ]]
   then
      return -1
   else
      return 0
   fi
}
############# 主处理流程 ##################

    is_right=0
    set -A conf_proc
    set -A isrun_proc
    conf_num=0
    isrun_num=0
    cyclenum=1

    echo `date +"%Y-%m-%d %T"` "Begin check <ispmain>..."

while (( 1 ))
do
    #echo "**********************[$(date +"%Y-%m-%d %T")] <$(expr ${cyclenum} % 1000 )> **********************"
   
    ## 用ps查询程序信息,写入临时文件中
    ps -ef|grep ${PROC_KEY} | grep -v grep | awk '{print $8,$9,$10}' > ${TMP_FILE}
#   ps aux|grep ${PROC_KEY} | grep -v grep | awk '{print $11,$12,$13}' > ${TMP_FILE}

    ## 逐一检查程序信息
    ii=0
    while read cur_p_name
    do
        isrun_proc[${ii}]=${cur_p_name}
        ii=$(expr ${ii} + 1 )
    done<${TMP_FILE}
    isrun_num=${ii}   

    ###########
    ii=0
    while read procname
    do
        conf_proc[${ii}]=${procname}
        ii=$(expr ${ii} + 1 )
    done<${PROCLIST}
    conf_num=${ii}   

    #echo " 正在比较查询的程序信息......"


    i=0
    ## 主流程
    while (( i < ${conf_num} ))
     do
       y=0
       is_right=0

       while(( y < ${isrun_num} ))
        do

          #echo " ${conf_proc[${i}]}----${isrun_proc[${y}]} "
          comp_str ${conf_proc[${i}]} ${isrun_proc[${y}]}

          if [[ $? == 0 ]]; then
             is_right=1
             #echo " `date +/"%Y-%m-%d %T/"`: 进程<${conf_proc[${i}]}>正常"
             break
          fi

          ((y+=1))
        done

        ######## 进程不存在或者异常,则重新拉起
        if [[ ${is_right} != 1 ]]; then
            echo " `date +/"%Y-%m-%d %T/"`: 进程<${conf_proc[${i}]}>不存在或者异常,将重新运行..."
            run_com ${conf_proc[${i}]}
        fi

        ((i+=1))
     done

    ## 删除临时程序信息文件
    rm -f ${TMP_FILE}

    ## 暂停片刻
    #echo " sleep ${SLEEP_VAL} ......"
    sleep ${SLEEP_VAL}

   #cyclenum=$(expr ${cyclenum} + 1)
done


    echo " .Exit."

 

#############################

## 欢迎朋友指正!

#############################

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值