#!/bin/bash omcbinpath="/usr/local/omc/bin" function debug_log() { watcherLogFile=/usr/local/omc/log/check_proc_status`date +%Y%m%d`.log timestr=`date +%H:%M:%S` #echo $timestr echo "$timestr $1" >> $watcherLogFile } process_id=0 function get_process_id() { # parameter: process_name progname=$1 process_id=`ps -aef|grep -v grep|grep '\./'$1 |awk '{print $2}'` } process_status=0 function get_process_status() { # parameter: process_name progname=$1 pid=`ps -aef|grep -v grep|grep -c '\./'$1` if test $progname == "mysqld" ; then pid=`ps -aef|grep -v grep|grep -c 'mysqld'` fi if test $progname == "httpd" ; then pid=`ps -aef|grep -v grep|grep -c 'httpd'` fi if test $pid -ge 1 ; then process_status=1 else process_status=0 fi } function get_param() { # parameter: file_name parameter_name ret=`grep "$2=" $1|awk -F= '{print $2}'` echo $ret } function get_master_process() { master_line=`grep -n '\[master_task\]' $omcbinpath/conf/server.conf |awk -F: '{print $1}'` slave_line=`grep -n '\[slave_task\]' $omcbinpath/conf/server.conf |awk -F: '{print $1}'` sed -n "${master_line},${slave_line}"p $omcbinpath/conf/server.conf|grep '^\s*[a-zA-Z]' |awk '{print $1}' } function get_slave_process() { slave_line=`grep -n '\[slave_task\]' $omcbinpath/conf/server.conf |awk -F: '{print $1}'` sed -n "${slave_line},$"p $omcbinpath/conf/server.conf|grep '^\s*[a-zA-Z]' |awk '{print $1}' } omc_state=`get_param $omcbinpath/dual/dualstate State` master_list=`get_master_process` slave_list=`get_slave_process` get_process_status "mysqld" mysql_status=$process_status get_process_status "httpd" http_status=$process_status get_process_status "omcMain" omcMain_status=$process_status status_list="$mysql_status$http_status$omcMain_status" # master if [ "x$omc_state" == "xMaster" -o "x$omc_state" == "xSingle" ] ;then for prog in $master_list; do get_process_status "$prog" prog_status=$process_status status_list="$status_list$prog_status" if [ $prog_status -eq 0 ] ;then debug_log "Run in $omc_state, start process $prog" cd $omcbinpath ./$prog -d sleep 1 fi done fi # slave if [ "x$omc_state" == "xSlave" ] ;then for prog in $master_list; do get_process_status "$prog" if [ $process_status -eq 1 ] ;then if [ `echo $slave_list|grep -c $prog` -eq 0 ] ;then debug_log "Run in $omc_state, stop process $prog" get_process_id $prog kill -9 $process_id fi fi done for prog in $slave_list; do get_process_status "$prog" prog_status=$process_status status_list="$status_list$prog_status" if [ $prog_status -eq 0 ] ;then debug_log "Run in $omc_state, start process $prog" cd $omcbinpath ./$prog -d sleep 1 fi done fi echo $status_list echo $status_list > $omcbinpath/dual/procstatus