peter-y
12/16/2017 - 3:16 AM

tomcat 部署记录

tomcat 部署记录

#多实例部署
下载tomcat 8.5.24 
wget 
tar zxvf tar.gz 解压
tomcat里面有两个环境变量 需要理解
CATALINA_HOME 和 CATALINA_BASE
在使用tomcat 多实例部署的时候,需要对tomcat本身的目录结构进行拆分,原装目录结构如下
./:
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work

bin/:
bootstrap.jar  catalina-tasks.xml            configtest.bat  digest.bat        setclasspath.sh  startup.bat      tomcat-native.tar.gz  version.bat
catalina.bat   commons-daemon.jar            configtest.sh   digest.sh         shutdown.bat     startup.sh       tool-wrapper.bat      version.sh
catalina.sh    commons-daemon-native.tar.gz  daemon.sh       setclasspath.bat  shutdown.sh      tomcat-juli.jar  tool-wrapper.sh

conf/:
catalina.policy      context.xml           jaspic-providers.xsd  server.xml        tomcat-users.xsd
catalina.properties  jaspic-providers.xml  logging.properties    tomcat-users.xml  web.xml

lib/:
annotations-api.jar  catalina-storeconfig.jar  jasper-el.jar   servlet-api.jar    tomcat-i18n-es.jar  tomcat-jni.jar        websocket-api.jar
catalina-ant.jar     catalina-tribes.jar       jasper.jar      tomcat-api.jar     tomcat-i18n-fr.jar  tomcat-util.jar
catalina-ha.jar      ecj-4.6.3.jar             jaspic-api.jar  tomcat-coyote.jar  tomcat-i18n-ja.jar  tomcat-util-scan.jar
catalina.jar         el-api.jar                jsp-api.jar     tomcat-dbcp.jar    tomcat-jdbc.jar     tomcat-websocket.jar

temp/:
safeToDelete.tmp

webapps/:
docs  examples  host-manager  manager  ROOT

work/:

1.其中bin/ lib/ 算是tomcat的主体部分,可多实例公用,2.conf/	webapps/ work/ logs/ temp/ 等都是根据实例不同而会产生变化的部分
1.则就是CATALINA_HOME 需要指定的位置 2.则是CATALINA_BASE需要指定的位置(当使用多实例时,catalina_base 的指向会发生变化)
这样操作的好处是 tomcat和工程分离,tomcat的升级并不会影响分出的实例配置,我也相信应该能便于进行统一配置(猜的哈哈哈)

可以在保留 home 文件的情况下,复制多分 base文件:
apache-tomcat-8.5.24/:
bin  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt

tomcat-ins1/:
conf  logs  temp  webapps  work

tomcat-ins2/:
conf  logs  temp  webapps  work

此时就能够使用多实例启动(需要调整 conf/ 下的端口信息)

启动脚本:
#!/bin/bash

export CATALINA_HOME=/opt/tomcat-multiple-instances/apache-tomcat-8.5.24
export CATALINA_BASE=${1%/}

echo $CATALINA_BASE

TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'`


if [ -n "$TOMCAT_ID" ] ; then
echo "tomcat(${TOMCAT_ITOMCAT_ID}) still running now , please shutdown it firest";
    exit 2;
fi

TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh`


if [ "$?" = "0" ]; then
    echo "$0 ${1%/} start succeed"
else
    echo "$0 ${1%/} start failed"
    echo $TOMCAT_START_LOG
fi

结束脚本
#!/bin/bash

export CATALINA_HOME=/opt/tomcat-multiple-instances/apache-tomcat-8.5.24
export CATALINA_BASE=${1%/}

echo $CATALINA_BASE

TOMCAT_ID=`ps aux |grep "java"|grep "[D]catalina.base=$CATALINA_BASE "|awk '{ print $2}'`

if [ -n "$TOMCAT_ID" ] ; then
TOMCAT_STOP_LOG=`$CATALINA_HOME/bin/shutdown.sh`
else
    echo "Tomcat instance not found : ${1%/}"
    exit

fi


if [ "$?" = "0" ]; then
    echo "$0 ${1%/} stop succeed"
else
    echo "$0 ${1%/} stop failed"
    echo $TOMCAT_STOP_LOG
fi

使用时需要追加catalina_base的目录位置 start.sh /opt/tomcat-multiple-instances/tomcat-ins1

# 守护进程部署
事先最好配置环境变量$JAVA_HOME $CATALINA_HOME

守护进程部署是linux的说法,windows 上是做为服务启动。而想要让tomcat做为服务启动,需要关注两个东西:
1. jsvc  2.$catalina_home/bin/daemon.sh 脚本
daemon脚本提供run\start\stop\version操作,可直接放入 /etc/init.d 文件下开机启动,操作基于 jsvc的存在,启动需要用户tomcat,需要事先生成,并授权catalina_home 和 catalina_base 给tomcat

编译生成jsvc,编译需要jdk的支持。。。。
tar xvfz commons-daemon-native.tar.gz
进入加压文件夹的 unix目录 /opt/tomcat-multiple-instances/apache-tomcat-8.5.24/bin/commons-daemon-1.1.0-native-src/unix
进行配置 ./configure --with-java=$JAVA_HOME (这里指定java home 目录) 看提示,会让你执行下一步 如果前置依赖都满足的话,会让你执行 make
前置依赖: gcc 啥的。。。搜一搜就知道了 安装一下
make 完成后 会看到jsvc 执行文件
config.log  config.nice  config.status  configure  configure.in  INSTALL.txt  jsvc  Makedefs  Makedefs.in  Makefile  Makefile.in  man  native  support
把该执行文件放入 $catalina_home/bin 目录下

此时如果没有多实例部署的话 使用bin下的daemon.sh start 就能够进行实例启动,会生成两个进程,一个守护进程(我这儿是root守护...) 一个执行进程,执行进程会用tomcat用户执行。然而我试了一下 守护进程 我用root能杀死。。。。然后就能杀执行进程。直接杀执行进程是不成功的,会生成新的执行进程

如果多实例部署的话需要指定 catalina_base 的目录
./daemon.sh --catalina-base /opt/tomcat-multiple-instances/tomcat-ins1 start

#加入服务 ?? 
把daemon.sh放入 /etc/init.d/目录下 可chkconfig tomcat on 也可 service tomcat start 便于管理???滑稽
但发现一个问题 /etc/init.d/tomcat 这个下面的shell 用不了环境变量 不知道原因还???WTF
需要编辑 daemon.sh 并在其中硬指定CATALINA_HOME的位置/opt/tomcat-multiple-instances/apache-tomcat-8.5.24
然后就可以了
因为启动都是基于脚本所以也就可以这么操作 service tomcat --catalina-base /opt/tomcat-multiple-instances/tomcat-ins1 start
试了好像没啥问题哈哈哈 这样就能够通过指定 不同的base目录 通过service 来启动和停止不同的实例了
当然了 如果没有多实例部署的话 就直接使用 chkconfig tomcat on 来设置tomcat 开机启动就行了

//问题来了  这玩意儿我能不能使用普通用户来执行 不能每次都用root啊,权限太大了
// 多实例 现在还没法弄自启动 。。。 因为base目录是个必要条件,没有的话不行。不指定的话直接在home目录下生成文件了。。。log pid 啥的,倒是可以通过定义shell配置,一个base一个文件,勉强能都自动启动
// 因为不是systemctl 控制,所以 status 也就看不到状态 一直显示 dead