Shell检查程序是否正常,并显示出程序启动时间、执行时间


项目中多个实例,而每个实例均启动一个程序,本脚本将多个程序统一进行监控,并支持文件配置

#!/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\n" "${program}" "ok" "${startTime}" "${etime}" "${programNum}" "${correctNum}" "${pid}"
    else
        printf "%-26s %7s %20s %14s %12s %12s %10s\n" "${program}" "ERROR" "${startTime}" "${etime}" "${programNum}" "${correctNum}" "${pid}"
    fi
}

### 打印标题
printf "%-26s %7s %20s %14s %12s %12s %10s\n" "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组成


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM