Files
svc.ems/bin/dual/check_proc_status.sh

120 lines
2.7 KiB
Bash

#!/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