#!/bin/bash - # 环境变量 export PATH=$PATH ################################################## 参数区 ################################################## # 进程列表 proc_name=( zone_svr_10_999_ag db_proxy_10_999_ag world_svr_10_999_ag zone_conn_10_999_ag redis_proxy_10_999_ag world_busd_svr_10_999_ag db_global_proxy_10_999_ag chat_svr_10_999_ag moderation_svr_10_999_ag mq_proxy_10_999_ag ) # 进程状态 proc_ok=() proc_no=() ################################################## 函数区 ################################################## # 检查进程状态 function check_proc(){ # 检查所有进程 for p in ${proc_name[*]};do # 获取数组长度 proc_ok_length=${#proc_ok[*]} proc_no_length=${#proc_no[*]} # 检查进程是否运行 run_count=$(ps -ef|grep "${p}.pid"|grep -v grep|wc -l) if [ "${run_count}" == "1" ];then is_zone_svr=$(echo "${p}" |grep -c 'zone_svr') stat_file="/data/home/mmog/server_999/runenv/zone_svr/bin/zone_svr_10_999_ag.stat" # 检查ZONE_SVR进程 if [ "${is_zone_svr}" == "1" ] && [ -f "${stat_file}" ];then # 循环检查启动状态 for i in {1..10}; do zone_stat=$(cat "${stat_file}") # 进程已停止 if [ "${zone_stat}" == "0" ];then proc_no[${proc_no_length}]=$p break # 进程启动中 elif [ "${zone_stat}" == "1" ];then sleep 1 # 进程运行中 elif [ "${zone_stat}" == "2" ];then proc_ok[${proc_ok_length}]=$p break fi done # 循环检查后还是不为2,则标记为失败 zone_stat=$(cat "${stat_file}") if [ "${zone_stat}" != "2" ];then proc_no[${proc_no_length}]=$p fi else proc_ok[${proc_ok_length}]=$p fi else proc_no[${proc_no_length}]=$p fi done } # 本地打印格式 function local_print(){ echo "------------------------------" echo " 墨迹大侠_中顺_999服 " echo "------------------------------" echo " 已启动进程信息 " echo "------------------------------" for i in ${proc_ok[*]};do ps -ef|grep "${i}.pid"|grep -v grep|awk -v "name=$i" '{print $5,name}' done echo "------------------------------" echo " 未启动进程信息 " echo "------------------------------" for i in ${proc_no[*]};do echo "$i" done echo "------------------------------" } # 远程打印格式 function remote_print(){ #打印启动进程信息 echo "" if [ "${#proc_ok[*]}" == "0" ]; then echo "_love_" else for i in ${proc_ok[*]};do ps -ef|grep "${i}.pid"|grep -v grep|awk -v "name=$i" '{print $5,name}' done fi echo "" #打印停止进程信息 echo "" if [ "${#proc_no[*]}" == "0" ]; then echo "_love_" else for i in ${proc_no[*]};do echo "$i" done fi echo "" } # 打印检查结果 function check_result(){ # 检查进程 check_proc # 打印结果 if [ -z $1 ];then local_print else remote_print fi } ################################################## 任务区 ################################################## # 检查运行结果 check_result $1