Created
December 16, 2017 03:16
-
-
Save peter-y/952d787bfce9254949c86db49e6f700d to your computer and use it in GitHub Desktop.
tomcat 部署记录
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#多实例部署 | |
下载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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment