項目中多個實例,而每個實例均啟動一個程序,本腳本將多個程序統一進行監控,並支持文件配置
#!/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組成