tomcat – CATALINA_BASE和CATALINA_HOMEvariables

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

在我的tomcat安装中,我设置了CATALINA_HOME来指向一个“common”文件夹(比如说/tomcat6 ), CATALINA_BASEvariables取决于实例名称(比如/tomcat_instance1/tomcat_instance2

我的问题是这样的:

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

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

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

在Apache Tomcat发行版的根目录下的RUNNING.txt文件中,标题为Advanced Configuration – Multiple Tomcat Instances

CATALINA_HOMECATALINA_BASE

如果你正在运行多个实例,那么你需要两个variables,否则只需要CATALINA_HOME

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

CATALINA_HOME表示Tomcat安装的根目录。

或者,可以通过为每个实例定义$CATALINA_BASE来为多个实例configurationTomcat。 如果没有configuration多个实例,则$CATALINA_BASE$CATALINA_HOME相同。

请参阅: Apache Tomcat 7 – 简介

在单独的CATALINA_HOMECATALINA_BASE运行,在RUNNING.txt文档中有说明:

CATALINA_HOMECATALINA_BASE环境variables分别用于指定Apache Tomcat的位置及其活动configuration的位置。

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

例如:

(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环境variables设置为包含“个人”Tomcat实例文件的目录。

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

CATALINA_BASE

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

CATALINA_HOME

  • bin – 启动和closures脚本
  • 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 

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

是否使用这些variables的任何东西?

就我个人而言,在Linux和Windows上,在开发和生产环境中都不需要改变。 除非你正在做一些依赖于他们的东西,否则你可能会让他们独处。

catalina.sh设置了Tomcat需要工作的variables。 它还说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. 

我很肯定你会发现当你启动你的服务器时你的设置是否工作。

这与多个实例无关。 这两个环境variables允许您将Tomcat二进制文件与Tomcatconfiguration文件分开。

默认情况下, CATALINA_BASE (configuration)和CATALINA_HOME (二进制文件)指向相同的文件夹。

但是,将CATALINA_BASE指向另一个目录允许您将configuration目录从CATALINA_HOME指向的二进制文件目录中分离出来。

当您想要更新二进制文件而无需修改,或者需要为Tomcat备份/恢复configuration文件,或者希望以不同的configuration并排运行多个Tomcat实例时,这非常有用。

要利用此function,只需创buildconfig目录并使用CATALINA_BASE环境variables指向它即可。 你将不得不把一些文件在该目录中:

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

CATALINA_BASE是可选的。

但是,在以下情况下,有助于设置与CATALINA_HOME分开的CATALINA_BASE。

  1. 在同一主机上运行多个tomcat实例时

    • 这有助于只有1个运行时间的tomcat安装,多个CATALINA_BASE服务器configuration运行在不同的端口上。
    • 如果需要进行任何修补或版本升级,则只需要进行一次安装更改,或者需要进行testing/validation/签名。
  2. 分离关注(单一责任)

    • Tomcat运行时是标准的,在每个发布过程中都不会改变。 即Tomcat的二进制文件
    • 发布过程可能会添加更多的东西作为web应用程序(webapps文件夹),环境configuration(conf目录),日志/ temp /工作目录

这是包含tomcat.exe文件的bin的父文件夹:

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

CATALINA_BASECATALINA_HOME相同。