monitor

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容