项目中多个实例,而每个实例均启动一个程序,本脚本将多个程序统一进行监控,并支持文件配置
#!/bin/sh bin=$(cd `dirname $0`;pwd) cd ${bin} ### 定义检查函数 chkProgram(){ # programName 程序名 # correctNum 程序正确的进程数 # programSubName 程序的子程序名 programName=$1 correctNum=$2 programSubName=$3 # 判断是否带子程序名 if [ -n "${programSubName}" ] then programNum=$(ps -ef|grep -Ewv "grep|less|more|zgrep|zless|vi|vim|gzip"|grep ${programName}|grep ${programSubName}|wc -l) info=($(ps -eo pid,lstart,etime,cmd |grep -Ewv "grep|less|more|zgrep|zless|vi|vim|gzip"|grep ${programName}|grep ${programSubName}|awk '{print $1" "$3" "$4" "$5" "$6" "$7}'|tail -1)) program="${programName}|${programSubName}" else programNum=$(ps -ef|grep -Ewv "grep|less|more|zgrep|zless|vi|vim|gzip"|grep ${programName}|wc -l) info=($(ps -eo pid,lstart,etime,cmd |grep -Ewv "grep|less|more|zgrep|zless|vi|vim|gzip"|grep ${programName}|awk '{print $1" "$3" "$4" "$5" "$6" "$7}'|tail -1)) program=${programName} fi # 解析进程信息 pid=${info[0]} startTime=$(date -d "${info[1]} ${info[2]} ${info[3]} ${info[4]}" "+%Y-%m-%d %H:%M:%S") etime=${info[5]} # 判断进程数是否一致 if [ ${programNum} -eq ${correctNum} ] then printf "%-26s %7s %20s %14s %12s %12s %10s " "${program}" "ok" "${startTime}" "${etime}" "${programNum}" "${correctNum}" "${pid}" else printf "%-26s %7s %20s %14s %12s %12s %10s " "${program}" "ERROR" "${startTime}" "${etime}" "${programNum}" "${correctNum}" "${pid}" fi } ### 打印标题 printf "%-26s %7s %20s %14s %12s %12s %10s " "ProgramName" "Status" "StartTime" "RunningTime" "ProgramNum" "CorrectNum" "PID" ### 检查子程序 for i in `cat programSubNameFile` do chkProgram "programName" 1 ${i} done ### 检查程序 chkProgram "programName" 1
PS. 发现zless实际是由less和zgrep组成