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
" "${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组成

原文地址:https://www.cnblogs.com/chenzechao/p/10577024.html