Weblogic计划任务之重启脚本

只需要在服务器上创建两个文件即可:
1、vim config.txt

**** JAVA *****

AIX平台的JAVA常为:/usr/java5/bin/java

Linux平台的JAVA常为:/usr/local/JDK/jdk1.7.0_75/bin/java

javapath=/usr/local/JDK/jdk1.7.0_75/bin/:/usr/java5_64/bin:.
export PATH=$PATH:/usr/local/JDK/jdk1.7.0_75/bin/:/usr/java5_64/bin:.

**** LANG *****

AIX平台的LANG常为:Zh_CN.GB18030

Linux平台的LANG常为:zh_CN.gb18030

export LANG="zh_CN.utf8"

**** LOG NAME ***

cronrebAdminlog 表示定时重启主管服务的日志文件

cronrebManagedlog 表示定时重启受管服务的日志文件

monAdminlog 表示监控主管服务的日志文件

monManagedlog 表示监控受管服务的日志文件

默认命名规则为"主机名_[定时重启|监控][主管|受管].log"

export cronrebAdminlog="/home/xlcpt/wls_mon/xlcpt_domain/log/xlcpt_cronrebAdmin.log"
export cronrebManagedlog="/home/xlcpt/wls_mon/xlcpt_domain/log/xlcpt_cronrebManaged.log"
export monAdminlog="/home/xlcpt/wls_mon/xlcpt_domain/log/xlcpt_monAdmin.log"
export monManagedlog="/home/xlcpt/wls_mon/xlcpt_domain/log/xlcpt_monManaged.log"

**** DOMAIN INFO *****

DOMAINNAME 表示domain的名称

DOMAIN_DIR 表示domain的目录

wls_jar 在监控时调用weblog.Admin类

LocalListenAddress 表示本服务器用于weblogic通信的IP

AdminServerIP 表示当前domain的主管IP

IsExistAdminServer 表示当前domain是否存在主管服务

export DOMAINNAME="xlcpt_domain"
export DOMAIN_DIR="/home/xlcpt/domains/xlcpt_domain"
export wls_jar="/home/weblogic/weblogic12/wlserver/server/lib/weblogic.jar"
export LocalListenAddress="10.133.212.29"
export AdminServerIP="10.133.212.29"
export IsExistAdminServer="true"

** weblogic密钥文件 ***

userconfigfile 表示用户配置文件

userkeyfile 表示用户密钥文件

这两个参数是weblogic无密码访问的用户凭证

export userconfigfile="/home/xlcpt/wls_mon/xlcpt_domain/config/xlcpt-WebLogicConfig.properties"
export userkeyfile="/home/xlcpt/wls_mon/xlcpt_domain/config/xlcpt-WebLogicKey.properties"

** 重启服务时判断服务状态的时间间隔和次数 ***

start_interval 表示在重启主/受管时监控服务是否已经启动的时间间隔,start_interval=15 表示在重启时每隔15秒判断一次服务状态

start_count 表示在重启主/受管时监控服务是否已经启动的判断次数,start_count=24 表示在重启时总共判断24次

重启过程中若判断了24次后仍然获取不到服务状态为running,则程序认为服务起不来

export start_interval=15
export start_count=24

** Server List ***

注意:如果有部分受管不需要重启或者监控,请在前面加上#号屏蔽

该domain下受管服务清单如下:

ManagedServerName ListenAddress ListenPort

ManagedServer8002 10.133.212.29 8002
ManagedServer8003 10.133.212.29 8003

主管服务该domain下,详细信息为:

注意:为了保证受管宕了能自动重启,请不要屏蔽掉主管服务信息!

AdminServerName ListenAddress ListenPort

AdminServer8001 10.133.212.29 8001

2、vim wls_mon.sh
usage()
{
cat <<EOF
USAGE: wls_mon.sh [ -h ] [-c [ Admin|Managed ] ] [-a [ Admin|Managed ] ]
OPTIONS:
-h help,使用过程中遇到任何问题,请联系脚本提供者;
-c [ Admin|Managed ] 定时重启weblogic主管或者受管服务;
-a [ Admin|Managed ] 定时监控weblogic主管或者受管服务状态;
EOF
exit 0;
}

ftpserver()
{
ftpasswd=openssl des3 -d -k 123 -base64 -in /home/$(whoami)/.ftp41.properties
ftpfile="$1" #要发送的文件
ftp -n <<! 2>/dev/null 1>&2
open ${ftpip}
user ${ftpuser} ${ftpasswd}
cd ${ftpdir}
bin
prompt
put ${ftpfile}
bye
!
}

sendNotice()
{
#传过来的参数分别是:服务名称 监听地址 监听端口 [宕了|启动失败] [宕了但进程还存在]
[ $# -lt 4 ] && {
echo "传递给sendNotice函数的参数不对,请检查!;exit"
}

tf="`hostname`_`date +'%y%m%d_%H%M%S'`.txt" #这里要加上秒,因为若同一个分钟内则生成的文件会覆盖掉

[ "$4" = "down" ] && {
cat <<EOF >${tf}
`date +'%F %T'`  监控到:
IP地址为:${LocalListenAddress}
主机名为:`hostname` 
domain名为:${DOMAINNAME} 
服务名:$1 监听地址:$2 监听端口:$3 的服务挂了,$5请重启之!

EOF
}

[ "$4" = "failed" ] && {
cat <<EOF >${tf}
时间:`date +'%F %T'`
IP地址为:${LocalListenAddress}
主机名为:`hostname` 
domain名为:${DOMAINNAME} 
服务名:$1 监听地址:$2 监听端口:$3 的服务重启失败,请检查!!!

EOF
}

ftpserver ${tf} >/dev/null
rm -rf ${tf}

}

cronCtrl()
{
#传过来的参数分别是:[on|off] [Admin|Managed]
[ $# -ne 2 ] && {
echo "传递给cronCtrl函数的参数不对,请检查!;exit"
}

arg1=$1
arg2=$2
if [ "$arg1" = "off" ]
then
    crontab -e <<! 2>/dev/null 1>&2

/wls_mon.sh -a ${arg2}
:. s/^/#/g
:wq
!
else
if [ "$arg1" = "on" ]
then
crontab -e <<! 2>/dev/null 1>&2
/wls_mon.sh -a ${arg2}
:. s/^#//g
:wq
!
fi
fi
}

substatus()
{
ListenAddr=$1
ListenPort=$2
ServerName=$3
#考虑到weblogic服务周期下有多个状态,这里只是检测是否为running(虽然只有在running时才能建立起连接)
/usr/local/JDK/jdk1.7.0_75/bin/java -cp ${wls_jar} weblogic.Admin -url t3://${ListenAddr}:${ListenPort} -userconfigfile ${userconfigfile} -userkeyfile ${userkeyfile} GETSTATE|grep -i running|grep -v grep > /dev/null
echo $?
}

GetServerStatus()
{
ListenAddr=$1
ListenPort=$2
ServerName=$3
rt_res=2 #默认为非0,选择为2,即获取不到状态
rt_res=$(substatus $1 $2 $3 &)
sleep 5 #超时,这个时间请斟酌
#rt_res=$? #上面语句若正常返回结果,则为0,覆盖rt_status的值
if [ "${rt_res}" -eq 0 ]
then
echo "0" #说明获取到的状态是running的
else
if [ "${rt_res}" -eq 1 ]
then
echo "1" #说明获取到的状态不是running的
else
if [ "${rt_res}" -eq 2 ]
then
ps -ef|grep "/usr/local/JDK/jdk1.7.0_75/bin/java -cp ${wls_jar} weblogic.Admin -url t3://${ListenAddr}:${ListenPort} -userconfigfile ${userconfigfile} -userkeyfile ${userkeyfile} GETSTATE"|awk '{print "kill -9",$2}'|sh
echo "2" #说明java -cp进程hang住了
fi
fi
fi
}

GetProcStatus()
{
ListenAddr=$1
ListenPort=$2
ServerName=$3
#考虑到IDS系统端口号跟服务名不匹配的情况,不以端口为关键字进程过滤
ps -ef|grep -i "Dweblogic.Name=${ServerName}"|grep -v grep >/dev/null
#这里加强约束,只检测java进程,像tail -f之类的进程在这里不管了
echo $?
}

StopServer()
{
ListenAddr=$1
ListenPort=$2
ServerName=$3

echo "`date +'%F %T'` 停服务: 服务名为 ${ServerName} 监听地址为 ${ListenAddr} 监听端口为 ${ListenPort}"
#停受管服务前先判断主管服务时不时活的,如果主管挂了,则不停受管了
if [ `echo $ServerName|grep Managed` ]
    then
        AdminServerName=`cat ./config/config.txt|grep -i "^AdminServer[0-9]\{1,4\}"|awk '{print $1}'`
        AdminListenAddr=`cat ./config/config.txt|grep -i "^AdminServer[0-9]\{1,4\}"|awk '{print $2}'`
        AdminListenPort=`cat ./config/config.txt|grep -i "^AdminServer[0-9]\{1,4\}"|awk '{print $3}'`
        if [ $(GetServerStatus $AdminListenAddr $AdminListenPort $AdminServerName) -eq 1 ]
        then
            echo "主管服务挂了,为了不影响受管服务启动,在此不停该受管了!"
            return 3 #退出启动进程
        fi
fi

ServerStatus="$(GetServerStatus $ListenAddr $ListenPort $ServerName)"
ProcStatus="$(GetProcStatus $ListenAddr $ListenPort $ServerName)"

if [ ${ServerStatus} -eq 0 ] #停服务之前,先看是不是活的,如果是活的,可以用weblogic方法来停
then
    echo "`date +'%F %T'` 服务: ${ServerName} 是活的,开始停该服务..."
    /usr/local/JDK/jdk1.7.0_75/bin/java -cp ${wls_jar} weblogic.Admin -url t3://${ListenAddr}:${ListenPort} -userconfigfile ${userconfigfile} -userkeyfile ${userkeyfile} FORCESHUTDOWN ${ServerName}|grep -v "^$"
    sleep 3
    if [ ${ServerStatus} -eq 0 ] #考虑到调weblogic接口停服务并不一定成功
    then
        echo "调用weblogic接口停服务失败,采用杀进程的方法停该服务..."
        ps -ef|grep ${ServerName}|grep -v grep|awk '{print "kill -9",$2}'|sh >/dev/null
        #这里为什么不用Dweblogic.Name?考虑到有tail -f进程,也给他杀掉
    fi
    echo "`date +'%F %T'` 服务: ${ServerName} 已经停止!"
else
    if [ ${ProcStatus} -eq 0 ]
    then
        echo "服务本来就挂了但是仍然有残留进程,开始清理残留进程..."
        ps -ef|grep ${ServerName}|grep -v grep|awk '{print "kill -9",$2}'|sh >/dev/null
    fi
    echo "`date +'%F %T'` 服务: ${ServerName} 本来就宕了!"
fi

}

StartServer()
{
ListenAddr=$1
ListenPort=$2
ServerName=$3

echo "`date +'%F %T'` 启服务: 服务名为 ${ServerName} 监听地址为 ${ListenAddr} 监听端口为 ${ListenPort}"
if [ $(GetServerStatus $ListenAddr $ListenPort $ServerName) -eq 0 ] #启服务前,先看服务是否启着,考虑到人工干扰
then
    echo "`date +'%F %T'` 服务: ${ServerName} 是活的,不重新启动了!"
    return 3
fi

if [ `echo $ServerName|grep Admin` ]
then
    if [ ! -f ${DOMAIN_DIR}/bin/startAdmin8001.sh ]
    then
        echo "路径${DOMAIN_DIR}/bin/startAdmin8001.sh 找不到,请检查!"
        cronCtrl on Admin  #把关闭的监控任务启起来
        exit
    else
        cd ${DOMAIN_DIR}/bin #注意这里为什么要这么执行,是有原因的,是为了配合脚本中清理缓存的操作
        echo "`date +'%F %T'` 服务: ${ServerName} 开始启动..."
        #sh startAdmin8001.sh & #这样运行的话,会产生一个sh startAdmin8001.sh后台进程;会产生一个tail -f后台进程;会产生一个startWeblogic.sh后台进程,跟手工起有差别,会产生僵尸进程,不好
        cat startAdmin8001.sh|grep -v "^tail -f"|grep -v "^rm " >$$.tmp
        sh $$.tmp
        rm -rf $$.tmp
        sleep 15
        cd - >/dev/null #退出来,否则下一个序列执行bu了
    fi
else
    #启受管前要先判断主管服务是否是活的
        AdminServerName=`cat ./config/config.txt|grep -i "^AdminServer[0-9]\{1,4\}"|awk '{print $1}'`
        AdminListenAddr=`cat ./config/config.txt|grep -i "^AdminServer[0-9]\{1,4\}"|awk '{print $2}'`
        AdminListenPort=`cat ./config/config.txt|grep -i "^AdminServer[0-9]\{1,4\}"|awk '{print $3}'`
    if [ $(GetServerStatus $AdminListenAddr $AdminListenPort $AdminServerName) -eq 1 ]
    then
        echo "主管服务挂了,请等待主管服务起来之后,再启动受管服务!"
        return 4 #退出启动进程
    fi

    name=`echo $ServerName|awk '{print substr($1,length($1)-3,4)}'`
    if [ ! -f ${DOMAIN_DIR}/bin/startManaged${name}.sh ] 
    then
        echo "路径${DOMAIN_DIR}/bin/startManaged${name}.sh 找不到,请检查!"
        cronCtrl on Managed  #把关闭的监控任务启起来
        exit
    else
        cd ${DOMAIN_DIR}/bin
        echo "`date +'%F %T'` 服务: ${ServerName} 开始启动..."
        #启动的时候获取日志
        cat startManaged${name}.sh|sed -e 's/\&/2>\&1 \&/'|grep -v "^tail -f"|grep -v "wait"|grep -v "sleep 20"|grep -v "^rm " >$$.tmp
        sh $$.tmp
        rm -rf $$.tmp
        #这个进程必须放到后台,否则运行不下去的
        tail -f ${DOMAIN_DIR}/log/${ServerName}.out >`pwd`/$$.log 2>&1 &
        sleep 15
        cd - >/dev/null #推出来,否则下一个序列执行bu了
    fi
fi
#--重启过程中不断的检测状态
count=0 ##统计监测服务状态的次数
while [ $(GetServerStatus $ListenAddr $ListenPort $ServerName) -eq 1 -o $(GetProcStatus $ListenAddr $ListenPort $ServerName) -eq 1 ]
do
    sleep ${start_interval}
    let count=count+1
    echo "第${count}次:weblogic检测服务是否启动(返回0表示正常): $(GetServerStatus $ListenAddr $ListenPort $ServerName)  进程检测服务是否存在(返回0表示正常): $(GetProcStatus $ListenAddr $ListenPort $ServerName)"
    if [ $count -ge ${start_count} ]
    then
        echo "`date +'%F %T'` 启动过程中共检测服务状态${count}次,系统认为 服务: ${ServerName} 起不来!"
        echo "`date +'%F %T'` 服务名为 ${ServerName} 监听地址为 ${ListenAddr} 监听端口为 ${ListenPort} 重启失败,发送通知!"
        sendNotice $ServerName $ListenAddr $ListenPort failed

        [ `echo $ServerName|grep Managed` ] && {
        echo "`date +'%F %T'` 为了不影响系统的正常运转,将不再重启其他受管!"
        }
        #cronCtrl on Managed  #把关闭的监控任务启起来
        cronCtrl on $(echo ${ServerName}|cut -c1-5)  #把关闭的监控任务启起来,这里是不知道是主观还是受管,故截取其前5个字符串也能实现
        ps -ef|grep "tail -f ${DOMAIN_DIR}/log/$ListenPort/${ServerName}\.out.$(date +%F)"|grep -v grep|awk '{print "kill -9",$2}'|sh >/dev/null 2>&1 #为了不影响对服务的判断,杀掉该进程
        rm -rf ${DOMAIN_DIR}/bin/$$.log
        exit
    fi
done
#看启动日志有没有报错
if [ `echo $ServerName|grep Managed` ]
then
    ps -ef|grep "tail -f ${DOMAIN_DIR}/log/$ListenPort/${ServerName}\.out.$(date +%F)"|grep -v grep|awk '{print "kill -9",$2}'|sh >/dev/null 2>&1 #为了不影响对服务的判断,杀掉该进程
    cat <<EOF >$$.error

<Error> <.> <BEA-[0-9]{1,6}
<Emergency> <.
> <BEA-[0-9]{1,6}
<Critical> <.*> <BEA-[0-9]{1,6}
EOF
cat ${DOMAIN_DIR}/bin/$$.log|grep -i -f $$.error >/dev/null
if [ $? -eq 0 ]
then
echo "date +'%F %T' 检查到服务在启动时报错,将该受管进程杀掉!"
ps -ef|grep -i ${ServerName}|grep -v grep|awk '{print "kill -9",$2}'|sh >/dev/null
echo "date +'%F %T' 服务: ${ServerName} 启动失败,等待监控时再自动重启!"

        echo "`date +'%F %T'` 服务名为 ${ServerName} 监听地址为 ${ListenAddr} 监听端口为 ${ListenPort} 重启失败,发送通知!"
        sendNotice $ServerName $ListenAddr $ListenPort failed

        echo "`date +'%F %T'` 为了不影响系统的正常运转,将不再重启其他受管!"
        #cronCtrl on Managed #把关闭的监控任务启起来,而且这里将日志写完
        echo ""
        echo "`date +'%F %T'` 重启***受管服务***任务执行完毕!" #有可能是定时重启,也有可能是监控重启
        echo "`date +'%F %T'` 将wls_mon.sh监控任务起来"
        echo "******************************************`date`******************************************"
        cronCtrl on Managed #如果是监控时重启失败的话,监控前并没有关闭crontab,也就是说没有必要开启
        rm -rf $$.error >/dev/null
        rm -rf ${DOMAIN_DIR}/bin/$$.log
        exit #退出进程
        #删除启动临时日志
    else
        echo "`date +'%F %T'` 服务: ${ServerName} 启动完毕!"
    fi
    rm -rf $$.error >/dev/null
else
    echo "`date +'%F %T'` 服务: ${ServerName} 启动完毕!"
fi
rm -rf ${DOMAIN_DIR}/bin/$$.log

}

MonAdminServer() ##开始循环监控主管
{
#传过来的参数分别是:服务名称 监听地址 监听端口
[ $# -ne 3 ] && {
echo "传递给MonAdminServer函数的参数不对,请检查!;exit"
}

ServerStatus="$(GetServerStatus $2 $3 $1)"
ProcStatus="$(GetProcStatus $2 $3 $1)"
if [ ${ServerStatus} -eq 1 -a ${ProcStatus} -eq 1 ]
then
    echo "`date +'%F %T'` 监控到:服务名:$1 监听地址:$2 监听端口:$3 的服务挂了,重启之!"
    StartServer $2 $3 $1
else
    if [ ${ServerStatus} -eq 1 -a ${ProcStatus} -eq 0 ]
    then
        echo "`date +'%F %T'` 监控到:服务名:$1 监听地址:$2 监听端口:$3 的服务挂了,但是进程还存在,杀掉进程,重启之!"
        ps -ef|grep $1 |grep -v grep|awk '{print "kill -9",$2}'|sh >/dev/null
        StartServer $2 $3 $1
    else
        if   [ ${ServerStatus} -eq 0 ]
        then
            echo "`date +'%F %T'` 监控到:服务名:$1 监听地址:$2 监听端口:$3 的服务是活的!"
        fi
    fi
fi

}

MonManagedServer() ##开始循环监控受管
{
#传过来的参数分别是:服务名称 监听地址 监听端口
[ $# -ne 3 ] && {
echo "传递给MonManagedServer函数的参数不对,请检查!;exit"
}

ServerStatus="$(GetServerStatus $2 $3 $1)"
ProcStatus="$(GetProcStatus $2 $3 $1)"
if [ ${ServerStatus} -eq 1 -a ${ProcStatus} -eq 1 ]
then
    if [ `date +'%H'` -ge 0 -a `date +'%H'` -le 6 ] #若时间在凌晨12点到6点之间
    then
        echo "`date +'%F %T'` 监控到:服务名:$1 监听地址:$2 监听端口:$3 的服务挂了,重启之!"
        StartServer $2 $3 $1
    else
        echo "`date +'%F %T'` 监控到:服务名:$1 监听地址:$2 监听端口:$3 的服务挂了,发送通知!"
        sendNotice $1 $2 $3 down
    fi
else
    if [ ${ServerStatus} -eq 1 -a ${ProcStatus} -eq 0 ]
    then
        if [ `date +'%H'` -ge 0 -a `date +'%H'` -le 6 ]
        then
            echo "`date +'%F %T'` 监控到:服务名:$1 监听地址:$2 监听端口:$3 的服务挂了,但是进程还存在,杀掉进程,重启之!"
            ps -ef|grep $1 |grep -v grep|awk '{print "kill -9",$2}'|sh >/dev/null
            StartServer $2 $3 $1
        else
            echo "`date +'%F %T'` 监控到:服务名:$1 监听地址:$2 监听端口:$3 的服务挂了,但是进程还存在,发送通知!"
            sendNotice $1 $2 $3 down "但是进程还存在,"
        fi
    else
        if   [ ${ServerStatus} -eq 0 ]
        then
            echo "`date +'%F %T'` 监控到:服务名:$1 监听地址:$2 监听端口:$3 的服务是活的!"
        else
              if [ ${ServerStatus} -eq 2 ]
                then
                    echo "`date +'%F %T'` 监控到:服务名:$1 监听地址:$2 监听端口:$3 的服务是hang住了,发送通知!"
                    sendNotice $1 $2 $3 down "服务hang住了,"
              fi
         fi
    fi
fi

}

ChkEnv()
{
#环境检查
if [ ! -f ./config/config.txt ]
then
echo "pwd/../config/config.txt文件不存在,请检查!"
exit
else
#读取config中环境变量
cat ./config/config.txt|grep -i "^export" >SetEnv.sh.$$ #这里用$$区分,否则多个进程间会打架
. ./SetEnv.sh.$$
rm -rf SetEnv.sh.$$
fi

[ ! -f ${wls_jar} ] && {
echo "weblogic.jar不存在,请检查/home/weblogic/weblogic12/wlserver/server/lib下是否有weblogic.jar"
exit
}

[ ! -f ${DOMAIN_DIR}/config/config.xml ] && {
echo "${DOMAIN_DIR}/config/config.xml文件不存在!"
exit
}

[ ! -d ${DOMAIN_DIR}/bin ] && {
echo "${DOMAIN_DIR}/bin目录不存在!"
exit
}

[ ! -f ${userconfigfile} -o ! -f ${userkeyfile} ] && {
echo "存储weblogic用户名和密码的userconfigfile和userkeyfile不存在,请检查`pwd`/config/下是否存在该文件"
echo "参考命令:
    /usr/local/JDK/jdk1.7.0_75/bin/java -cp /home/weblogic/weblogic12/wlserver/server/lib/weblogic.jar
        -Duser.home=`pwd` -Duser.name=`hostname` weblogic.Admin  
    -username weblogic -password weblogic STOREUSERCONFIG"
exit
}

[ -z "$(cat config/config.txt|grep -e "^ManagedServer[0-9]\{1,4\}")" ] && {
echo "`pwd`/config/config.txt中没有domain的***受管***信息,或者受管信息被#屏蔽了,请检查!"
exit
}

[ -z "$(cat config/config.txt|grep -e "^AdminServer[0-9]\{1,4\}")" ] && {
echo "`pwd`/config/config.txt中没有domain的***主管***信息,请检查!"
exit
}

[ "${IsExistAdminServer}" = "true" -a ! -f ${cronrebAdminlog} ] && {
touch  ${cronrebAdminlog}
}

[ "${IsExistAdminServer}" = "true" -a ! -f ${monAdminlog} ] && {
touch  ${monAdminlog}
}

[ ! -f ${cronrebManagedlog} ] && {
touch  ${cronrebManagedlog}
}

[ ! -f ${monManagedlog} ] && {
touch  ${monManagedlog}
}

}

ChkEnv

case $1 in
-c*)
shift 1
#定时重启主管并且本domain确实存在主管
if [ "$1" = "Admin" -a "${IsExistAdminServer}" = "true" ]
then
ChkEnv
echo "**date**" >>${cronrebAdminlog}
echo "date +'%F %T' 定时重启主管服务任务开始执行!" >>${cronrebAdminlog}
echo "" >>${cronrebAdminlog}
echo "date +'%F %T' 先把crontab中监控主管状态的任务屏蔽,防止冲突!" >>${cronrebAdminlog}
cronCtrl off Admin >>${cronrebAdminlog}
cat ./config/config.txt|grep -i "^AdminServer[0-9]{1,4}"|while read ServerName ListenAddr ListenPort
do
StopServer ${ListenAddr} ${ListenPort} ${ServerName} >>${cronrebAdminlog} #停服务
StartServer ${ListenAddr} ${ListenPort} ${ServerName} >>${cronrebAdminlog} #起服务
done
echo "" >>${cronrebAdminlog}
echo "date +'%F %T' 定时重启主管服务任务执行完毕!" >>${cronrebAdminlog}
echo "date +'%F %T' 将wls_mon.sh监控任务起来">>${cronrebAdminlog}
echo "**date**" >>${cronrebAdminlog}
sleep 60
cronCtrl on Admin >>${cronrebAdminlog}
else
if [ "$1" = "Managed" ]
then
ChkEnv
echo "**date**" >>${cronrebManagedlog}
echo "date +'%F %T' 定时重启受管服务任务开始执行!" >>${cronrebManagedlog}
echo "date +'%F %T' 先把crontab中监控受管状态的任务屏蔽,防止冲突!" >>${cronrebManagedlog}
cronCtrl off Managed >>${cronrebManagedlog}
cat ./config/config.txt|grep -i "^ManagedServer[0-9]{1,4}"|while read ServerName ListenAddr ListenPort
do
echo "" >>${cronrebManagedlog}
echo "*服务名:${ServerName} 监听地址:${ListenAddr} 监听端口:${ListenPort}***" >>${cronrebManagedlog}
StopServer ${ListenAddr} ${ListenPort} ${ServerName} >>${cronrebManagedlog}
StartServer ${ListenAddr} ${ListenPort} ${ServerName} >>${cronrebManagedlog}
done
echo "" >>${cronrebManagedlog}
echo "date +'%F %T' 定时重启受管服务任务执行完毕!" >>${cronrebManagedlog}
echo "date +'%F %T' 将wls_mon.sh监控任务起来">>${cronrebManagedlog}
echo "**date**" >>${cronrebManagedlog}
sleep 60
cronCtrl on Managed >>${cronrebManagedlog}
else
echo "执行定时重启主/受管的参数错误!"
usage
fi
fi
;;
-a*)
shift 1
#监控主管并且本domain确实存在主管
if [ "$1" = "Admin" -a "${IsExistAdminServer}" = "true" ]
then
ChkEnv
echo "**date**" >>${monAdminlog}
echo "date +'%F %T' 监控主管服务任务开始执行!" >>${monAdminlog}
echo "" >>${monAdminlog}
cat ./config/config.txt|grep -i "^AdminServer[0-9]{1,4}"|while read ServerName ListenAddr ListenPort
do
MonAdminServer ${ServerName} ${ListenAddr} ${ListenPort} >>${monAdminlog}
done
echo "" >>${monAdminlog}
echo "date +'%F %T' 监控主管服务任务执行完毕!" >>${monAdminlog}
echo "**date**" >>${monAdminlog}
else
if [ "$1" = "Managed" ]
then
ChkEnv
echo "**date**" >>${monManagedlog}
echo "date +'%F %T' 监控受管服务任务开始执行!" >>${monManagedlog}
echo "" >>${monManagedlog}
cat ./config/config.txt|grep -i "^ManagedServer[0-9]{1,4}"|while read ServerName ListenAddr ListenPort
do
MonManagedServer ${ServerName} ${ListenAddr} ${ListenPort} >>${monManagedlog}
done
echo "" >>${monManagedlog}
echo "date +'%F %T' 监控受管服务任务执行完毕!" >>${monManagedlog}
echo "**date**" >>${monManagedlog}
else
echo "执行定时重启主/受管的参数错误!"
usage
fi
fi
;;
*)
usage
;;
esac

最后将脚本命令添加到计划任务中即可!

猜你喜欢

转载自blog.51cto.com/11612019/2156667