您的位置:首页 > 运维架构

监控进程运行 KSH

2008-12-12 11:06 267 查看
#!/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."

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

## 欢迎朋友指正!

#############################
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: