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