自己写的shall函数集合

来源:互联网 发布:淘宝店刷销量方法 编辑:程序博客网 时间:2024/05/22 05:20
#!/bin/sh
#程序目的:判断TIM主机上组织同步脚本和人员同步脚本的运行情况,若不正常则自动启动应用;并短信告知状态。
#若检测出后台2进程失踪,则重新启动该进程并发短信通知管理员
#编写时间:2015-09-16  兰子洲 13071039067
#部署策略:TIM主机为HA架构,脚本部署在两台主机,定时任务执行






#模块0:核心函数,判断人员和组织进程的的运行情况
monitorOrgSync()
{
#如果主机有文件系统/ldapdata,则开始监控
#设置组织同步脚本后台进程的关键字 
keyWord=orgSyncLine

haIsMaster /ldapdata
isHa=$?
if [ isHa -eq 1 ]
then
psNumKeyWord ${keyWord}
psNumOrg=$?
if [ ${psNumOrg} -le 0 ]
then
ERRMSG="TIM系统监控:组织同步进程失效;将10秒后自动重启组织同步脚本!"
sleepTime="sleep 10"
sendMsg="send_msg"
#varPar="java /ldapdata/idi/classes/OrgSyncStop" --这个脚本是在restart上看到的,觉着没有用,先注释掉
startOrg="./ldapdata/idi/bin/startOrg.sh"
judge  "${sendMsg}" "${sleepTime}" "${varPar}" "${startOrg}"

#10秒钟如果进程正常,发送进程已经正常的短信
sleep 10
ERRMSG="TIM系统监控:组织同步进程已经恢复正常. ^-^"
psNumKeyWord ${keyWord}
psNumOrgAnother=$?
if [ ${psNumOrgAnother} -gt "0" ]
then
send_msg
fi
else
echo "TIM系统监控:组织同步进程正常。" 
fi
else
echo "The Host is not master."
fi
}


monitorPersonSync()
{
#如果主机有文件系统/ldapdata,则开始监控
#定义人员同步脚本后台进程的关键字
keyWord=haPersonEventhandler

haIsMaster /ldapdata
isHa=$?
if [ ${isHa} -eq 1 ]
then
psNumKeyWord ${keyWord}
psNumPerson=$?
if [ ${psNumPerson} -le "0" ]
then
ERRMSG="TIM系统监控:人员同步进程失效;将10秒后自动重启人员同步脚本!"
sleepTime="sleep 10"
sendMsg="send_msg"
startPerson="./ldapdata/idi/bin/startPerson.sh"
judge  "${sendMsg}" "${sleepTime}" "${startPerson}"

#10秒钟如果进程正常,发送进程已经正常的短信
sleep 10
ERRMSG="TIM系统监控:人员同步进程已经恢复正常. ^-^"
psNumKeyWord keyWord
psNumPersonAnother=$?
if [ ${psNumPersonAnother} -gt "0" ]
then
send_msg
fi
else
echo "TIM系统监控:人员同步进程正常。" 
fi
else
echo "The Host is not master."
fi
}


#模块1:判断HA状态(是否为master状态)
#传入参数:共享文件系统名
#返回值:1是主状态,0是从状态,2表示程序输出错误
haIsMaster()
{
#fsName:传入的共享文件系统名字
fsName=$1

tmpNum=`df | grep ${fsName} | grep -v grep | wc -l`

if [ ${tmpNum} -gt 1 ]
then echo "关键字${fsName},请检查传递的参数,关键字在文件系统中不止一个!"  
return 2
elif [ ${tmpNum} -eq 1 ]
then echo "关键字${fsName},系统中存在该文件系统且只有一个。" 
return 1
elif [ ${tmpNum} -eq 0 ]
then echo "关键字${fsName},系统中不存在该文件系统." 
return 0
fi 
}


#模块2:用关键字判断进程的数量
#传入参数:用关键字表示的进程名
#返回值:进程的数量
psNumKeyWord()
{
#keyWord:进程名关键字
keyWord=$1

keyWordNum=`ps -ef | grep ${keyWord} | grep -v grep | wc -l`

return ${keyWordNum}
}


#模块3:执行多个脚本或任务
judge()
{
echo ""
echo "Programs starting..."
echo "There are $# Apps need to be done."
#定义日志文件,用日期表示
Time=`date "+%Y%m%d"`
dir=/opt/script/
#logFile=${dir}${Time}_run_para.log

#从传入的参数开始执行
for p in "$@"
  do
    #如果存在日志文件,则在日志文件中追加
    if [ -f ${logFile} ]
                    then
            $p >> ${logFile} 2>&1 
                    if [ $? -eq 0 ]
                    then
                                                    Log_Words="----------------The [ $p ] is OK!      At:$(date +%Y.%m.%d_%H:%M:%S) ------------------"
                            echo ${Log_Words}
                    else
                            Log_Words="XXXXXXXXXXXXXXXX The [ $p ] is fail!      At:$(date +%Y.%m.%d_%H:%M:%S) XXXXXXXXXXXXXXXXXX"
                echo ${Log_Words} 
                break
              fi
         
     #如果不存在日志文件,则创建日志文件
     else
           $p > ${logFile} 2>&1
            if [ $? -eq 0 ]
                  then
                                                  Log_Words="----------------The [ $p ] is OK!      At:$(date +%Y.%m.%d_%H:%M:%S) ------------------"
                          echo ${Log_Words} 
                  else
                          Log_Words="XXXXXXXXXXXXXXXXThe [ $p ] is fail!      At:$(date +%Y.%m.%d_%H:%M:%S) XXXXXXXXXXXXXXXXXX"
              echo ${Log_Words} 
              break
            fi
       fi
 done
}


#模块4:发送错误短信提醒
send_msg()
{
#PHONE=/home/monitor/sms_phone_number
PHONE=/home/monitor/lion.sms
       for number in `cat $PHONE`
               do
               java -cp /home/monitor/com.jar:/home/monitor SendShortMsg $number "`hostname` $ERRMSG $LOG_TIME"
               done
}


monitorOrgSync
monitorPersonSync
0 0