只需要在服务器上创建两个文件即可: 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

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