设为首页 收藏本站
查看: 2273|回复: 0

[经验分享] tomcat多主机多实例,以及无法加载项目的处理

[复制链接]

尚未签到

发表于 2015-12-23 15:24:19 | 显示全部楼层 |阅读模式
文章有些地方可能介绍的不一样,因为我直接本地用nginx做了一个代理。属于本人留存!还有就是这个已经写了好久了,断断续续修修改改,尽管我已经检查了但可能发到博客上的这份有些位置还是难免忘记解释什么。我及时修正。

当时我遇到一个无法查找到原因的难题,是关于tomcat在运行时被rm -rf掉了(你懂的)。然后使用备份的配置文件重新部署上,发现tomcat可以起来并且不报任何错误,但项目全部都不会被tomcat加载。这个问题困 扰了我一天一夜,奋战到早上4点多,测试了无数方法,估计搞出无数的状况,也进行了无数次配置调试。问题原因依然没解决。
针对这个问题的解决办法是:把项目重新部署一份,也就是以前用的java程序必须删除掉,然后重新把之前备份的项目拷贝一份过来才行。怪异。。。。不知道有没有遇到过的!
系统信息:

[iyunv@localhost webserver]# cat /etc/issue CentOS release 6.6 (Final) Kernel \r on an \m
[iyunv@localhost webserver]# uname -r 2.6.32-431.17.1.el6.x86_64
* – * 我使用的是apache-tomcat-7.0.57.tar.gz

一、Tomcat配置
1)下载安装
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.57/bin/apache-tomcat-7.0.57.tar.gz
解压->软连后,没用的删除了。然后看下文件夹结构树

[iyunv@localhost webserver]# tree -d -L 1  tomcat7.0.57/
tomcat7.0.57/
├── bin
├── conf
├── lib
├── logs
├── temp
├── webapps
└── work

2)部署tomcat实例格式模版
OK,在tomcat安装程序tomcat7.0.57/下创建一个文件夹__masterplate_Basis__,将conf、 logs、temp、webapps、work拷贝到__masterplate_Basis__下,修改好相同部分配置后可把 __masterplate_Basis__当作模版拷贝出去一份
创建基础结构后,在查看一下tomcat 二级目录下树结构:

[iyunv@localhost webserver]# tree -d -L 2 tomcat7.0.57/
tomcat7.0.57/
├── bin
├── lib
├── __masterplate_Basis__  ├── conf  ├── logs  ├── temp  ├── webapps #这东西对于我这边服务器没用到  └── work

3)每个实例conf下的server.xml文件
最重要的几处修改和创建,我放在后面(startup.sh以及启动脚本)
修改模版呢conf下的server.xml,我直接用两个host主机的形式来配置(是为了比如两个服务关联性很强,一个停止另一个必须重启或者另一个无法使用就可以这样搞),如果你只做一个那可以去掉一个host。

[iyunv@localhost conf]# cat server.xml                                      
3-1)讲解server.xml上的一些信息

1)修改的地方是
停止tomcat时所需要的端口;
2)启动的虚拟主机端口,也就是服务端口(nginx代理的时候就是指向这个)
3)修改主机服务名,主机名等
3-1)
要修改这个位置的服务名
3-2)
修改这个位置的服务名以及下面的主机名
3-3)
3-4)然后在hosts文件内增加一行 127.0.0.1 ser1.kinggoo.com
3-over)记得将修改的字符串或者标识字符串写到hosts文件,此用来做nginx代理时用;
4)appBase ,如果你的项目是想放在webapps下面,那此位置则修改为webapps即可
4-1)否则,例:如你的项目在/PATH/Pro/ROOT/下,那请你将appBase内的路径改为:"/PATH/Pro/"
4-2)在Nginx代理的时候 root的位置填写成/PATH/Pro/ROOT/,root位置写成到ROOT那你一定会知道,这样等于就把ROOT下面的东西全部暴漏了。所以切记在nginx配置的时候要加上
location ~^/(WEB-INF)/ {
deny all;
}

5)* 检查没问题保存 ;

二、处理完server.xml配置文件后,开始修改启动脚本等1)创建每个实例项目的启动脚本,到时放在每个项目下(我已经把模版改成我的实例名称了 cp -rf 一份出来)

cat  tomcat.sh #!/bin/sh ## author:kinggoo.com ## blog: www.kinggoo.com ## Multi instance startup
. /etc/init.d/functions # 自动获取到tomcat实例目录
temp1="`pwd`" # 获取tomcat安装目录位置
temp2=$(dirname `pwd`) # 可选,设置启动参数乱七八糟的
opts="-server -Xms64m -Xmx256m -XX:PermSize=128m -XX:MaxPermSize=512m" # 获取此实例名称
servername=$(basename $temp1)
export JVM_OPTIONS
case "$1" in
start) if [ -f $temp2/bin/startup.sh ];then echo $"Start Tomcat"
sudo -u nginx $temp2/bin/startup.sh "$temp1" "$temp2" "$opts" "$servername" fi
;;
stop) if [ -f $temp2/bin/shutdown.sh ];then echo $"Stop Tomcat"
sudo -u nginx $temp2/bin/shutdown.sh "$temp1" "$temp2" echo $temp2 fi
;;
*) echo $"Usage: $0 {start|stop}" exit 1
;;
esac #exit $RETVAL
该脚本放在__masterplate_Basis__(每个项目下与conf,logs同级)
该脚本放在__masterplate_Basis__(每个项目下与conf,logs同级)
2)此脚本单独的使用方法

sh tomcat.sh  [start|stop]
如果你不需要下面这个我自己写的脚本,你可以定制了。多实例差不多看到这里就可以了,下面你可以看看参考资料,帮助很大哦!
3)整体多实例启动及相关信息脚本(切记还有一个ini的文件)

[iyunv@localhost tomcat7.0.57]# cat  run.sh #!/bin/bash # # # author:kinggoo.com or Ts. # # blog: http://www.kinggoo.com # # blog: http://helpcmd.com # # 需要读取当前目录下的.config.ini文件 # # --------------------------------------- # # 使用方法: # # sh run.sh all [start|stop] # # 或: # # sh run.sh 实例名称 [start|stop] # # 或: # # sh run.sh # # --------------------------------------- #
cd `dirname $0`; ########### function #############
function __readINI() {
INIFILE=$1;    SECTION=$2;     ITEM=$3
_readIni=`awk -F '=' '/\['$SECTION'\]/{a=1}a==1&&$1~/'$ITEM'/{print $2;exit}' $INIFILE`
echo ${_readIni}
}

function __runStatus() {
_num=$1;  _serviceFileName=$2 if (( $_num==0 ));then
cd ${_serviceFileName}
sh tomcat.sh start > /dev/null
cd -
elif (( ${_num}==1 ));then
cd ${_serviceFileName}
sh tomcat.sh stop > /dev/null && rm -fr ./work/*
cd - else break
fi
}

function __port(){ # input # return  port array
_serviceName="$1/conf/server.xml" if [[ -e ${_serviceName} ]];then
echo $(grep -o -P -i 'port=\"(.*)\"\ {0,}protocol=\"HTTP' ${_serviceName} | tr -d "a-zA-Z=\"") else break
fi

} # ########### end fun ############

declare -a arr
_serviceName=( $( __readINI .config.ini SERVER_LIST S_LIST ) )
_tomcatVersion=$( __readINI .config.ini T_VER T_VERSION ) # server all start/stop if [[ -n $1 || $1 == "all" ]];then if [[ $2 == "start" ]];then m=0;
elif [[ $2 == "stop" ]];then m=1; else break
fi
echo ${_serviceName[@]} |grep -P -o -i "$1" >/dev/null && _go=1 || _go=0 if [[ $1 == "all" && ${_go} -eq 0 ]];then for (( i=0;$i 0 && $(echo ${_psTomcat}|grep -o -E "$i" |wc -l) > 0  ]];then y="6"
_status="\033[3${y}m start \033[0m"   
arr[$count]=1
fi
echo -e "${count}) - [ ${_status} ] - \033[3${y}m $i \033[0m [tomcat.port: $(__port $i) ]"

((count=$count+1))
done

echo -e "\n* 输入服务前的序号后,会将此序号对应服务状态置为相反状态"
echo -n "请输入服务序号:" && read c if [[ "$(echo $c | sed 's/[0-9]/1/g')" == "1"  && -n $c ]];then if [[ $c -lt ${#_serviceName[@]} ]];then
__runStatus ${arr[$c]} ${_serviceName[$c]} sleep 5
fi else break
fi
done
fi
echo -e "\n\n------------------------------------\nPowered by : http://www.kinggoo.com"
4).config.ini文件内容

[iyunv@localhost tomcat7.0.57]# cat .config.ini
; tomcat 安装目录
[TOMCATPATH]
T_PATH = /opt/webserver/tomcat7.0.57
; #

; 实例文件夹名称(按下面格式输写)
[SERVER_LIST]
S_LIST = kinggoo.com_0 kinggoo1 helpcmd4 kinggoo6 kinggoo5 kinggoo7
; #

; 识别tomcat服务标识,只要可以检索出所有的tomcat进行即可 \
; 请自己测试 。脚本里会用到:pgrep tomcat7.0.57
[T_VER]
T_VERSION = tomcat7.0.57

三、脚本使用方法:
run.sh脚本有三种执行方式:
1)为添加到service内使用,全部 停止|启动 服务;

sh  run.sh all [start|stop]
如:shell>$  sh run.sh all start
2)启动单实例tomcat服务;

sh  run.sh 单实例文件夹名称 [start|stop]
如:shell>$  run.sh kinggoo.com_0 start
3)运行脚本,列出实例运行状态。可停止|启动单个实例

sh run.sh
会有如下界面产生
DSC0000.png
文内参考:
tree


中文解释:tree
功能说明:以树状图列出目录的内容。
语 法:tree [-aACdDfFgilnNpqstux][-I  ][-P
][目录…]
补充说明:执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件。
参 数:
-a 显示所有文件和目录。
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C 在文件和目录清单加上色彩,便于区分各种类型。
-d 显示目录名称而非内容。
-D 列出文件或目录的更改时间。
-f 在每个文件或目录之前,显示完整的相对路径名称。
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上”*”,”/”,”=”,”@”,”|”号。
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i 不以阶梯状列出文件或目录名称。
-I
不显示符合范本样式的文件或目录名称。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-n 不在文件和目录清单加上色彩。
-N 直接列出文件和目录名称,包括控制字符。
-p 列出权限标示。
-P
只显示符合范本样式的文件或目录名称。
-q 用”?”号取代控制字符,列出文件和目录名称。
-s 列出文件或目录大小。
-t 用文件和目录的更改时间排序。
-u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。
二、Tomcat配置文件Host元素属性介绍

属性名:appBase、使用对象:all、含义:这一Host的Web应用程序目录的路径(Web应用程序和/或WAR文件驻留的目录)。可以是CATALINA_HOME的相对路径,或者是绝对路径、默认值:无;必要的元素

属性名:autoDeploy、使用对象:all、含义:Boolean型表值,在Tomcat正运行时,决定Tomcat是否自动部署最佳到 Host的appBase目录中的新Web应用程序。如果该属性被设置为true,则在Tomcat正运行时,在appBase目录中追加Web应用程序 的解包目录或WAR文件,则Tomcat将立即对其实现部署。、默认值:ture
属性名:className、使用对象:all、含义:Host容器实现的完全限定类名。该类必须实现org.apache.catalina.Host、默认值:org.apache.catalina.core.standardHost
属性名:deployOnstartup、使用对象:all、含义:Boolean型标记,决定Tomcat在启动时是否自动部署在Host的appBase目录下找到的Web应用程序。、默认值:true
属性名:deployXML、使用对象:S、含义:Boolean型标记,决定Tomcat是否在CATALINA_HOME/conf /[engine-name]/[host-name]目录下自动部署拥有context XML片段文件的Web应用程序、默认值:true
属性名:errorReportValVeClass、使用对象:S、含义:允许由Java开发者定制错误网页,必须实现 org.apache.catalina.Valve、默认值:org.apache.catalina.valves.Error- ReportValve
属性名:name、使用对象:all、含义:Host名。在所有Engine的Host名中,必须惟一、默认值:无;必要的属性
属性名:unpackHars、使用对象:S、含义:决定在Tomcat启动Web应用程序之前是否解包WAR文件的标志。如果为true,则 Tomcat在解压目录之外提供Web应用程序的资源。如果为false,则在压缩的的WAR文件之外提供Web应用程序的资源、默认值:true
属性名:workDir、使用对象:S、含义:除了在Contexts指定不同的workDir之外,在该Host中所有Web应用程序使用的临时文件路径名、默认值:\${catalina.base}/work
属性名:xmlNamespaceAware、使用对象:、含义:该标志知道启用或禁用XML命名空间。设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验、默认值:false
属性名:xmlValidation、使用对象:、含义:决定Tomcat是否对Web.xml文件执行有效性检验的标志。在大部分 Tomcat版本中,该功能不是很有用,因为XML分析器与一直到Sun JDK 1.6.0(包括1.6.0)的JVM中的XML分析器不兼容、默认值:false
此介绍来自于网络 http://blog.csdn.net/mmm123lmj/article/details/6649306

版权声明:
转载原创文章请注明,文章出处:http://kinggoo.com
原文地址: http://kinggoo.com/app-tomcat-7057.htm

Category:Command,Linux,Shell,Tomcat
Tag:hosts,tomcat,tomcat 多虚拟主机,tomcat7.0.57,tomcat启动脚本,tomcat安装配置,tomcat项目不加载,tree,多实例,多实例脚本

  • 本文来自:Linux教程网

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155356-1-1.html 上篇帖子: zabbix监控tomcat是否正常工作 下篇帖子: 如何对tomcat进行安全设置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表