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 而如果是从其他目录来调用install的情况,先cd到install文件所在目录,再取得install的绝对路径,并返回至原目录下

# 3 使用install调用该文件,使用的是当前目录路径

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

#初始化

#执行日志目录初始化

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

# 程序无法正常启动时,尝试次数

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  : 检查程序状态,如果异常则启动程序. 若重复${TOMCAT_LOOP_COUNTER}次启动后,

#                仍然检测状态异常,则返回异常.

#  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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容