管理多tomcat实例的shell脚本

为了简化tomcat的部署复杂度, 把以前单独配置的脚本提出来做了一个带参数的, 可以用于单机环境下的多tomcat实例管理.

其中deploy功能, 会将指定的模块war按日期时间更名备份后, 再部署新的war

命令行格式为

tc.sh [tomcat_location] {status|start|stop|restart|jstat|deploy} [module_name]

脚本代码

复制代码
# Please define the absolute path of tomcat instance
JAVA_HOME=/opt/java/jdk1.8.0_101
TC_BASE=/home/tomcat
BUILD_FOLDER=/home/tomcat/builds

status() {
  echo -n "[$(date +%Y%m%d-%H%M%S)] "
  pid=`ps -ef|grep ${CATALINA_BASE}|grep -v 'grep'|grep 'java'|awk '{print $2}'`
  if [ -z ${pid} ] ; then
    echo $1' is not running'
  else
    echo $1' is running at pid: '${pid}
  fi
}

start() {
  echo -n "[$(date +%Y%m%d-%H%M%S)] Start: "
  pid=`ps -ef|grep ${CATALINA_BASE}|grep -v 'grep'|grep 'java'|awk '{print $2}'`
  if [ -z ${pid} ] ; then
    echo $1
    . ${CATALINA_BASE}/bin/startup.sh
  else
    echo $1' is running at pid: '${pid}
  fi
}

stop() {
  if [ -z $1 ]; then
    exit 1
  fi

  echo -n "[$(date +%Y%m%d-%H%M%S)] Stop: "
  pid=`ps -ef|grep ${CATALINA_BASE}|grep -v 'grep'|grep 'java'|awk '{print $2}'`
  if [ -z $pid ] ; then
    echo $1' is not running'
  else
    echo $1' is running at pid:'${pid}
    . ${CATALINA_BASE}/bin/shutdown.sh
    sleep 5
  fi

  pid=`ps -ef|grep ${CATALINA_BASE}|grep -v 'grep'|grep 'java'|awk '{print $2}'`
  if [ -z $pid ] ; then
    echo 'Done'
  else
    echo 'Still running, now killing with pid:'${pid}
    ps -ef|grep ${CATALINA_BASE}|grep -v 'grep'|grep 'java'|awk '{print $2}'|xargs kill -s 9
  fi
}

restart() {
  stop $1
  sleep 1
  start $1
}

deploy() {
  if [ -z $2 ]; then
    echo $"Usage: $0 $1 deploy [module_name]"
    exit 2
  fi
  [ -f ${BUILD_FOLDER}/$2.war ] || exit 1

  stop $1
  df -h
  echo ''

  local BACKUP_FILENAME=$2-$(date +%Y%m%d-%H%M).war
  echo -n "[$(date +%Y%m%d-%H%M%S)] Deploy: "
  echo -n "backup ${BACKUP_FILENAME}... "
  mv ${CATALINA_BASE}/webapps/$2.war ${BUILD_FOLDER}/${BACKUP_FILENAME}
  echo -n "clean... "
  rm -rf ${CATALINA_BASE}/webapps/$2
  echo -n "copy... "
  cp -f ${BUILD_FOLDER}/$2.war ${CATALINA_BASE}/webapps/
  echo 'done'

  start $1
}

jstat() {
  if [ -z $1 ]; then
    exit 1
  fi
  local CATALINA_BASE=${TC_BASE}/$1
  [ -d ${CATALINA_BASE} ] || exit 1
  echo -n "[$(date +%Y%m%d-%H%M%S)] jstat: "
  pid=`ps -ef|grep ${CATALINA_BASE}|grep -v 'grep'|grep 'java'|awk '{print $2}'`
  if [ -z $pid ] ; then
    echo $1' is not running'
  else
    echo $1' is running at pid:'${pid}
    ${JAVA_HOME}/bin/jmap -heap ${pid}
    echo ''
    ${JAVA_HOME}/bin/jstat -gcutil ${pid} 1000 10
  fi
}

if [ -z $1 ]; then
  echo $"Usage: $0 [tomcat_location] {status|start|stop|restart|jstat|deploy} [module_name]"
  exit 2
else
  target=${1%/}
fi

CATALINA_BASE=${TC_BASE}/$target
[ -d ${CATALINA_BASE} ] || exit 1

case "$2" in
    status)
        $2 $target
        ;;
    start)
        $2 $target
        ;;
    stop)
        $2 $target
        ;;
    restart)
        $2 $target
        ;;
    jstat)
        $2 $target
        ;;
    deploy)
        $2 $target $3
        ;;
    *)
        echo $"Usage: $0 [tomcat_location] {status|start|stop|restart|jstat|deploy} [module_name]"
        exit 2
esac
复制代码

对应的tomcat实例内部的startup.sh 和 shutdown.sh, 只需要配置jvm参数和tomcat源路径

startup.sh

JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:MaxNewSize=512m -Djava.awt.headless=true"
CATALINA_HOME=/opt/tomcat/apache-tomcat-8.0.36
. $CATALINA_HOME/bin/catalina.sh start

shutdown.sh

CATALINA_HOME=/opt/tomcat/apache-tomcat-8.0.36
. $CATALINA_HOME/bin/catalina.sh stop

 

posted on   Milton  阅读(255)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示