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