tomcat启动可以通过两个脚本分别进行启动 ./startup.sh 或者 catalina.sh run 形式执行启动
其实startup.sh的启动也是调用的catalina.sh,然后去启动的,所以我们需要关注的就是catalina.sh文件
1 首先 tomcat在启动的时候会查找tomcat的安装目录,也就是它的根目录,然后通过CATALINA_BASE和CATALINA_HOME 这两个变量去查找,所以一台服务器上的多台不同tomcat的根目录以及上述两个变量的值是不一样的,因此我们要设置一下上面的两个变量。
2 下一步就是设置每一台服务器的三个端口,要让每台tomcat的该三个对应的端口都不一样,这样才能保证同时启动多台tomcat成功
需要在文件中添加多组CATALINA环境变量(有几个tomcat就添加几组)。
####第一个Tomcat####
export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-8.5.6
export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.5.6
export TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.5.6
####第二个Tomcat####
export CATALINA_2_BASE=/usr/local/tomcat2/apache-tomcat-8.5.6
export CATALINA_2_HOME=/usr/local/tomcat2/apache-tomcat-8.5.6
export TOMCAT__2_HOME=/usr/local/tomcat2/apache-tomcat-8.5.6
如果有多个tomcat,方法一样,继续往下添加即可。
记得修改完要用source /etc/profile使其生效。
具体操作是切换到tomcat2的bin目录下,vim catalina.sh,找到下面的注释代码
# OS specific support. $var _must_ be set to either true or false.
并在上述代码下面添加以下代码,目的是为了tomcat2启动的时候能通过该文件的里的$CATALINA_2_BASE 和 $CATALINA_2_HOME找到/etc/profile配置文件里我们前一步配好的具体路径,完成tomcat2的启动过程。
# myself : add
export CATALINA_BASE=$CATALINA_2_BASE
export CATALINA_HOME=$CATALINA_2_HOME
如果有多个tomcat,修改方法是一样的。
除了第一个tomcat使用的默认配置好的端口号(如果有需要也可以修改),后面添加的tomcat都要通过其根目录下的conf目录下的server.xml文件来修改端口号防止端口冲突。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改完端口之后,要重启tomcat,并且在防火墙里也要开放以上端口。
最后,按照上面的步骤如果还不能正常的同时运行多个tomcat,可能是云服务器的问题,由于我用的阿里云的服务器,后来我在云服务器上添加了安全组规则,将其他tomcat需要开放的端口(比如我tomcat2和tomcat3用到的http的访问端口是6060和7070),添加到安全组规则里,试了下就可以了。
因之前一篇文章中也有一种多tomcat启动的方式,在tomcat/bin/目录下 创建一个setenv.sh文件,也可以完成多tomcat的部署,但是这种方法有个问题,就是我们自定义使用shell脚本去启动tomcat的时候,就会抛出错误,具体错误说 tomcat/bin/setclasspath.sh文件不存在,不知道为什么日志中打印的该路径并没有指向tomcat的根目录,所以后来就修改成了上面的方式,使用自定义shell就ok啦