【问题标题】:Tomcat - CATALINA_BASE and CATALINA_HOME variablesTomcat - CATALINA_BASE 和 CATALINA_HOME 变量
【发布时间】:2010-06-22 05:00:42
【问题描述】:

我在同一台服务器 (Linux) 上运行了多个 tomcat 6 实例,它按预期工作。我试图找出关于设置CATALINA_HOMECATALINA_BASE 变量的标准做法。

在我的 tomcat 安装中,我已将 CATALINA_HOME 设置为指向“公共”文件夹(例如 /tomcat6),并且 CATALINA_BASE 变量因实例名称而异(例如 /tomcat_instance1/tomcat_instance2

我的问题是这样的:

  • 我真的需要两个变量吗?
  • 或者我可以只拥有一个CATALINA_HOME 并取消 CATALINA_BASE(反之亦然)?

【问题讨论】:

  • 问题本身就是一个答案。
  • 您需要这样做的原因是将 Tomcat 软件(位于 $CATALINA_HOME)的维护与 Tomcat 实例配置和内容(位于 $CATALINA_BASE)的维护分开。

标签: java tomcat environment-variables


【解决方案1】:

如果您在单个主机上运行多个 Tomcat 实例,您应该将 CATALINA_BASE 设置为等于每个实例的 .../tomcat_instance1.../tomcat_instance2 目录,并将 CATALINA_HOME 环境变量设置为公共 Tomcat安装,其文件将在两个实例之间共享。

如果您在主机上运行单个 Tomcat 实例,则CATALINA_BASE 环境是可选的,在这种情况下默认为CATALINA_HOME。如果您按原样运行多个实例,则应提供它。

高级配置 - 多个 Tomcat 实例

标题下,Apache Tomcat 发行版根目录下的 RUNNING.txt 文件中有一个很好的描述。

【讨论】:

  • 在Ubuntu上使用打包的Tomcat时,您的第二段不正确。它正确地将 Tomcat 软件(在 $CATALINA_HOME 中)与 Tomcat 实例(在 $CATALINA_BASE 中)分开。
【解决方案2】:

CATALINA_HOMECATALINA_BASE

如果您正在运行多个实例,那么您需要这两个变量,否则只需 CATALINA_HOME

换句话说:CATALINA_HOME 是必需的,CATALINA_BASE 是可选的。

CATALINA_HOME 代表 Tomcat 安装的根目录。

或者,可以通过为每个实例定义 $CATALINA_BASE 来为多个实例配置 Tomcat。如果不配置多个实例,$CATALINA_BASE$CATALINA_HOME 相同。

见:Apache Tomcat 7 - Introduction

使用单独的 CATALINA_HOMECATALINA_BASE 运行记录在 RUNNING.txt 中,其中说:

CATALINA_HOMECATALINA_BASE 环境变量用于 指定 Apache Tomcat 的位置及其活动的位置 分别配置。

您不能在 setenv 脚本,因为它们用于查找该文件。

例如:

(4.1) 可以通过执行以下操作之一来启动 Tomcat 命令:

  %CATALINA_HOME%\bin\startup.bat         (Windows)

  $CATALINA_HOME/bin/startup.sh           (Unix)

  %CATALINA_HOME%\bin\catalina.bat start  (Windows)

  $CATALINA_HOME/bin/catalina.sh start    (Unix)

多个 Tomcat 实例

在许多情况下,最好有一个副本 Tomcat 二进制分发在同一台上的多个用户之间共享 服务器。为此,您可以设置CATALINA_BASE 环境变量到包含您的文件的目录 “个人”Tomcat 实例。

当使用单独的 CATALINA_HOMECATALINA_BASE 运行时, 文件和目录拆分如下:

CATALINA_BASE:

  • bin - 仅限:setenv.sh (*nix) 或 setenv.bat (Windows)、tomcat-juli.jar
  • conf - 服务器配置文件(包括 server.xml)
  • lib - 库和类,如下所述
  • logs - 日志和输出文件
  • webapps - 自动加载的网络应用程序
  • work - Web 应用程序的临时工作目录
  • temp - JVM 用于临时文件的目录>

CATALINA_HOME:

  • bin - 启动和关闭脚本
  • lib - 库和类,如下所述
  • endorsed - 覆盖标准“认可标准”的库。默认情况下不存在。

如何检查

检查CATALINA_BASECATALINA_HOME 的最简单方法是运行startup.sh,例如:

$ /usr/share/tomcat7/bin/startup.sh
Using CATALINA_BASE:   /usr/share/tomcat7
Using CATALINA_HOME:   /usr/share/tomcat7

您也可以通过dpkg 工具如下(Debian/Ubuntu)检查 Tomcat 文件的安装位置:

dpkg -L tomcat7-common

【讨论】:

  • 这是公认的更好的答案。解释得很好。
  • 请解释如何使用不同的CATALINA_BASE启动多个tomcat实例?
  • CATALINA_BASE 和 CATALINA_HOME 必须设置为系统变量:Windows:set CATALINA_BASE=path
【解决方案3】:

CATALINA_BASE 指向与CATALINA_HOME 不同的目录允许您将配置目录与二进制目录分开。

默认情况下,CATALINA_BASE(配置)和CATALINA_HOME(二进制文件)指向同一个文件夹,但将配置与二进制文件分开可以帮助您在不复制二进制文件的情况下并排运行多个 Tomcat 实例。

当您想要更新二进制文件而不修改或需要备份/恢复 Tomcat 的配置文件时,它也很有用。

2018 年更新

现在使用makebase 实用程序可以更轻松地设置 CATALINA_BASE。我在http://blog.rasia.io/blog/how-to-easily-setup-lucee-in-tomcat.html 上发布了一个涵盖该主题的教程,以及一个视频教程 https://youtu.be/nuugoG5c-7M

原来的答案在下面继续

要利用此功能,只需创建配置目录并使用CATALINA_BASE 环境变量指向它。您必须在该目录中放置一些文件:

  • 从原Tomcat安装目录复制conf目录,包括其内容,并确保Tomcat对其具有读取权限。根据需要编辑配置文件。
  • 如果conf/logging.properties指向${catalina.base}/logs,则创建logs目录,并确保Tomcat对其具有读/写权限。
  • 如果您没有覆盖指向${CATALINA_BASE}/temp 的默认$CATALINA_TMPDIR,则创建一个temp 目录,并确保Tomcat 对其具有写入权限。
  • 创建一个默认为${CATALINA_BASE}/workwork目录,并确保Tomcat对其有写权限。

【讨论】:

  • 不错的答案!尤其是关于如何手动构建/创建 CATALINA_BASE
【解决方案4】:

我不能说我知道最佳做法,但这是我的观点。

是否将这些变量用于任何事情?

就我个人而言,无论是在 Linux 还是在 Windows 上,在从开发到生产的不同环境中,我都不需要进行更改。除非你正在做一些特别依赖它们的事情,否则你可能会不理会它们。

catalina.sh 设置 Tomcat 开箱即用所需的变量。它还说CATALINA_BASE 是可选的:

#   CATALINA_HOME   May point at your Catalina "build" directory.
#
#   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
#                   of a Catalina installation.  If not present, resolves to
#                   the same directory that CATALINA_HOME points to.

我很确定您会在启动服务器时发现您的设置是否有效。

【讨论】:

  • 您能否在\bin\catalina.sh 文件中为两个tomcat 实例设置catalina_home 路径??
【解决方案5】:

CATALINA_BASE 是可选的。

但是,在以下情况下,设置独立于 CATALINA_HOME 的 CATALINA_BASE 会有所帮助。

  1. 当超过 1 个 tomcat 实例在同一主机上运行时

    • 这有助于只有 1 个运行时的 tomcat 安装,多个 CATALINA_BASE 服务器配置在不同的端口上运行。
    • 如果需要进行任何修补或版本升级,只需进行 1 次安装更改,或者需要进行测试/验证/签署。
  2. 关注点分离(单一职责)

    • Tomcat 运行时是标准的,不会在每个发布过程中更改。即 Tomcat 二进制文件
    • 发布过程可能会添加更多的东西,如 webapplication(webapps 文件夹)、环境配置(conf 目录)、logs/temp/work 目录

【讨论】:

    【解决方案6】:

    即bin的父文件夹,里面有tomcat.exe文件:

    CATALINA_HOME='C:\Program Files\Apache Software Foundation\Tomcat 6.0'
    

    CATALINA_BASECATALINA_HOME 相同。

    【讨论】:

    • 您的答案具有误导性...正确的答案应说明如果未配置多个实例,$CATALINA_BASE 与 $CATALINA_HOME 相同。` 根据the documentation
    • CATALINA_BASE 仅在您运行根实例时才等于 CATALINA_HOME。当您有多个实例时,情况会有所不同。
    • 我会说 CATALINA_BASE 和 CATALINA HOME 应该是不同的,即使你只有一个实例。这样,您的内容与您的安装是分开的。例如 /usr/share/tomcat 中的 CATALINA_HOME 和 /var/lib/tomcat 中的 CATALINA_BASE
    • 没有。对于多实例,它可能相同,但可能不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2012-02-28
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多