多个Tomcat的CATALINA_HOME设置


前言

前几天一个同事说我的某个web服务起不来了。这个web服务部署在某个用户目录的一个tomcat A下面,我登上去执行启动脚本的时候,显示启动的是opt目录下的一个tomcat O,但是没有在 tomcat O的日志目录下写日志的权限,所以报错了。
经检查当前tomcat A的配置文件没有修改过,当前用户变量也没有设置相关路径,结果在系统环境变量下面看到设置了export CATALINA_HOME=/opt/…/tomcat。经询问运维同事,最近迁移一些服务到该服务器上,因为共用一个tomcat安装目录,就在系统环境变量中添加了CATALINA_HOME的配置。所以我那个用户下的tomcat再重启就报错了。


一、CATALINA_HOME是什么?

在Tomcat的bin目录下打开catalina.sh可以看到CATALINA_HOME目录指Tomcat的安装目录,是必须的环境变量。与其相近的还有个CATALINA_BASE目录(可选),指Tomcat安装的动态部分的基本目录,如果不设置就指向CATALINA_HOME。
可以看到catalina.sh中显示如果没有指定CATALINA_HOME变量的值,就将当前目录作为CATALINA_HOME的值

# Only set CATALINA_HOME if not already set
[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`

如果没有指定CATALINA_BASE的值,就把CATALINA_HOME的值赋给CATALINA_BASE

# Copy CATALINA_BASE from CATALINA_HOME if not already set
[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"

所以,启动一个没有设置CATALINA_HOME变量的Tomcat时,默认的home目录就是当前catalina.sh所属的Tomcat目录。

二、多个Tomcat实例共用一个安装目录

1.使用场景

一个服务为了提高并发量,需要在同一台服务器上启动多个实例,或者同一台服务器上多个服务使用的Tomcat版本相同,这时候就可以让多个Tomcat实例共用一个安装目录,这样升级或者维护Tomcat的时候只需要操作一遍即可。

2.如何设置

虽然多个Tomcat实例可以共用一个安装目录,但是每个tomcat监听的端口、输出的日志等是不一样的,这时候可以将CATALINA_HOME指向共用Tomcat目录,而CATALINA_BASE指向每个实例所在的工作目录,工作目录下放置配置文件、日志、进程ID等内容。由于共用Tomcat的CATALINA_HOME路径都是一样的,可以设置在系统环境变量中,这样每个用户下所有的Tomcat 都可以使用。

三、不使用共用Tomcat的安装目录

假设某个服务比较特殊或者是很久以前就部署的,不能使用共用的Tomcat,只想使用自己目录下的Tomcat,如果没有设置系统环境变量CATALINA_HOME的话,直接启动就好了,默认就是启动当前目录下的Tomcat。
假如该服务器已经设置了系统环境变量CATALINA_HOME的话,对于某个用户下只有一个Tomcat的情况,可以在该用户的.bash_profile中设置CATALINA_HOME变量;对于某个用户下有多个Tomcat的情况,只能在特定Tomcat的启动脚本或者catalina.sh中设置。
这里还遇到一个小坑,我为启动报错的Tomcat设置CATALINA_HOME变量时,看到catalina.sh中的注释说不要在catalina.sh脚本中设置变量,而是放到一个setenv.sh脚本中,并把该脚本放到CATALINA_BASE/bin目录下。启动时catalina.sh脚本会自动加载该setenv.sh脚本中的变量。

#
# Environment Variable Prerequisites
#
#   Do not set the variables in this script. Instead put them into a script
#   setenv.sh in CATALINA_BASE/bin to keep your customizations separate.
#
#   CATALINA_HOME   May point at your Catalina "build" directory.

然而并没有起作用,于是看了下catalina.sh脚本的内容,发现加载setenv.sh脚本逻辑如下:

# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi

当时我想设置CATALINA_HOME变量的值,而未读取setenv.sh之前CATALINA_HOME指向的是公用Tomcat,脚本执行到此处自然读取公用Tomcat下的setenv.sh。所以我改成在catalina.sh开始的地方设置了一下CATALINA_HOME变量指向当前Tomcat,再启动就没有问题了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Tomcat环境变量中的"Catalina_home"指的是Tomcat服务器所在的安装目录路径。这个变量的命名来自于Tomcat的核心组件Catalina。Catalina是Tomcat的引擎,负责处理HTTP请求和响应。它是基于Servlet和JavaServer Pages(JSP)技术的Java Web服务器Catalina_home环境变量的作用在于告诉操作系统Tomcat服务器的根目录在哪里,这样系统就能够正确地找到Tomcat的配置文件、启动脚本和其他相关文件。通过设置Catalina_home,我们可以方便地定位和管理Tomcat的安装路径和相关组件。 为什么选择"Catalina_home"这个名称作为Tomcat环境变量呢?这是因为在Tomcat的架构中,Catalina扮演着核心角色,它是整个服务器的引擎和主要部分。因此,选择"Catalina_home"作为环境变量的名称是为了更好地表达Tomcat服务器整体架构中的重要组件和根目录。 当我们需要在脚本或配置文件中引用Tomcat根目录时,就可以使用Catalina_home环境变量来代替具体的路径。这样,只需要设置一次Catalina_home的值,就可以在多个地方重复使用,提高了代码的可维护性和可移植性。 总而言之,"Catalina_home"作为Tomcat环境变量的名称,是为了方便管理和定位Tomcat服务器的根目录,并且符合Tomcat架构中Catalina引擎的重要性和角色。 ### 回答2: Tomcat环境变量中的"catalina_home"是指Tomcat安装目录的路径。 首先,理解Tomcat的结构对于理解为什么环境变量被称为"catalina_home"是很重要的。Tomcat是一个Java应用程序服务器,它是用Java编写的,用于运行Java Web应用程序。Tomcat的安装目录包含了多个文件和文件夹,其中包括配置文件、日志文件、应用程序文件等。Tomcat的核心部分通常被称为"Catalina",它是Tomcat中负责处理HTTP请求、管理Servlet和JSP的核心组件。因此,Tomcat环境变量被称为"catalina_home"是因为它指的是Tomcat的安装目录,也就是"Catalina"的主目录。 在设置Tomcat环境变量时,将其命名为"catalina_home"可以更好地反映其作用。通过设置这个环境变量,我们可以让系统知道Tomcat的安装路径。这对于任何需要通过Tomcat运行的Java Web应用程序来说都是非常重要的。例如,在配置Tomcat时,我们需要指定Tomcat的安装路径来确定配置文件、日志文件和其他相关文件的位置。通过设置"catalina_home"环境变量,我们可以轻松地在配置和部署应用程序时引用Tomcat的安装路径。这样,我们就可以将应用程序和Tomcat服务器正确地关联起来,确保应用程序可以正常运行。 总之,"catalina_home"是Tomcat环境变量的名称,其作用是指明Tomcat的安装目录,以便在配置和部署Java Web应用程序时能够正确地引用Tomcat的相关文件和路径。 ### 回答3: tomcat环境变量中的catalina_home表示Tomcat服务器的主目录路径,为什么被命名为catalina_home呢? 这个命名是因为在Tomcat的核心目录结构中,有一个名为"Catalina"的文件夹,它包含了Tomcat服务器的所有主要组件和配置文件。"Catalina"文件夹中包含了Tomcat的核心功能,包括处理HTTP请求的Servlet容器、Web应用程序的部署和管理等。 由于"catalina_home"是Tomcat服务器的主目录路径,它被定义为一个环境变量,以便在任何位置都可以方便地引用和使用。通过设置正确的"catalina_home"环境变量,可以方便地找到Tomcat的主要目录位置,从而执行相关的Tomcat管理和部署任务。 在设置"catalina_home"环境变量之后,我们可以在命令行窗口或配置文件中使用这个变量,来指示Tomcat的主要目录路径。比如,在命令行中执行"catalina_home/bin/startup.bat"命令,可以启动Tomcat服务器,而无需明确指定Tomcat的安装目录。 总结来说,"catalina_home"被作为Tomcat环境变量的命名,是为了方便引用Tomcat服务器的主目录路径,这个目录包含了Tomcat的核心组件和配置文件,并且"catalina_home"环境变量的设置可以方便地进行Tomcat的管理和部署操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值