#!/bin/bash
# Copyright Huawei Technologies Co., Ltd. 1998-2015. All rights reserved.
# Description
# 該腳本適用于啟動、停止、重啟tomcat
######################################################################
JVM_MEM_OPT="-server -Xms3072m -Xmx3072m -XX:PermSize=108m -XX:MaxPermSize=256m"
RETURN_CODE_SUCCESS=0
RETURN_CODE_ERROR=1
######################################################################
#? DESCRIPTION: 切換到當前目錄
#? CALLS? ? ? : 無
#? CALLED BY? : main
#? INPUT? ? ? : 無
#? OUTPUT? ? : 無
#? LOCAL VAR? : 無
#? USE GLOBVAR: 無
#? RETURN? ? : 無
#? CHANGE DIR : 無
######################################################################
getCurPath()
{
# 1 如果當前目錄就是install文件所在位置,直接pwd取得絕對路徑
# 2 而如果是從其他目錄來調(diào)用install的情況,先cd到install文件所在目錄,再取得install的絕對路徑,并返回至原目錄下
# 3 使用install調(diào)用該文件,使用的是當前目錄路徑
if [ "` dirname "$0" `" = "" ] || [ "` dirname "$0" `" = "." ] ; then
CURRENT_PATH="`pwd`"
else
cd ` dirname "$0" `
CURRENT_PATH="`pwd`"
cd - > /dev/null 2>&1
fi
}
start_tomcat()
{
pid=$(ps -ef |grep $INSTANCE_LABEL | grep -v grep |? awk '{print $2}')
if [ -n "$pid" ] ; then
logger "console already start"
return 1
fi
export CATALINA_OPTS="$JVM_MEM_OPT -D$INSTANCE_LABEL"
nohup sh ${START_UP_SCRIPT} &
return 0
}
stop_tomcat()
{
export CATALINA_OPTS="-D$INSTANCE_LABEL"
sh "${SHUT_DOWN_SCRIPT}"
while ( true )
do
pid=$(ps -ef |grep $INSTANCE_LABEL | grep -v grep |? awk '{print $2}')
if [ -n "$pid" ] ; then
logger "try to kill console"
kill -9 "$pid"
else
break
fi
done
return 0
}
. /etc/profile
getCurPath
cd "${CURRENT_PATH}"
##引入公共模塊
. ./util.sh
##新建運行日志文件
LOGGER_PATH=${BASE_LOGGER_PATH}/monitor
LOGGER_FILE=${LOGGER_PATH}/${MODULE_NAME}.log
#初始化
#執(zhí)行日志目錄初始化
initLogDir
##檢查用戶
chkUser
PROC_NAME="${MODULE_NAME}.main.proc"
INSTANCE_LABEL="tomcat.instance.name=$PROC_NAME"
START_UP_SCRIPT=${TOMCAT_PATH}/bin/startup.sh
SHUT_DOWN_SCRIPT=${TOMCAT_PATH}/bin/shutdown.sh
# 程序無法正常啟動時,嘗試次數(shù)
TOMCAT_LOOP_COUNTER=3
# action
ACTION=$1
shift
# init ret value for exit
RETVAL=0
# ensure action is specficed
[ -z "$ACTION" ] && die "no action is specficed"
# start
start()
{
start_tomcat > /dev/null 2>&1
if [ $? -eq 0 ] ; then
RETVAL=0
logger "Result:start tomcat success"
else
sleep 2
status > /dev/null 2>&1
if [ $? -eq 0 ]; then
RETVAL=0
logger "Result:start tomcat success"
else
RETVAL=-1
logger "Result:start tomcat fail"
fi
fi
cd - >/dev/null 2>&1
}
# status
status()
{
# do some work, such as send one msg to process
if internalStatus >/dev/null ; then
logger "status check: normal"
return 0
else
logger "status check: abnormal"
return 2
fi
}
# stop
stop()
{
stop_tomcat > /dev/null 2>&1
if [ $? -ne 0 ] ;then
logger "Result:stop failed"
RETVAL=-1
else
logger "Result:stop success"
RETVAL=0
fi
cd - >/dev/null 2>&1
}
# restart
restart()
{
stop
sleep 2
start
}
######################################################################
#? FUNCTION? ? : check
#? DESCRIPTION? : 檢查程序狀態(tài),如果異常則啟動程序. 若重復(fù)${TOMCAT_LOOP_COUNTER}次啟動后,
#? ? ? ? ? ? ? ? 仍然檢測狀態(tài)異常,則返回異常.
#? CALLS? ? ? ? : 無
#? CALLED BY? ? : 無
#? INPUT? ? ? ? : 無
#? OUTPUT? ? ? : 無
#? READ GLOBVAR : 無
#? WRITE GLOBVAR: 無
#? RETURN? ? ? :? 成功? ? 0
#? ? ? ? ? ? ? ? ? 失敗? ? 2
######################################################################
check()
{
CURRENT_NUMBER=0
for((; CURRENT_NUMBER < ${TOMCAT_LOOP_COUNTER}; CURRENT_NUMBER++));
do
status > /dev/null 2>&1
if [ $? -eq 0 ] ;then
logger "Result:check success, CURRENT_NUMBER is ${CURRENT_NUMBER}"
return 0
else
logger "Result:check failed, CURRENT_NUMBER is ${CURRENT_NUMBER}. it will start."
start > /dev/null 2>&1
sleep 2
fi
done
logger "Result:check failed."
return 2
}
START_CONSOLE_LOCK=/tmp/start_console.lock
STOP_CONSOLE_LOCK=/tmp/stop_console.lock
RESTART_CONSOLE_LOCK=/tmp/restart_console.lock
CHECK_CONSOLE_LOCK=/tmp/check_console.lock
case "$ACTION" in
start)
lockWrapCall "$START_CONSOLE_LOCK" 'start'
;;
stop)
lockWrapCall "$STOP_CONSOLE_LOCK" 'stop'
;;
status)
status
;;
restart)
lockWrapCall "$RESTART_CONSOLE_LOCK" 'restart'
;;
check)
lockWrapCall "$CHECK_CONSOLE_LOCK" 'check'
;;
*)
die $"Usage: $0 {start|stop|status|restart|check}"
esac
exit $RETVAL