Tomcat安装在/usr/share/tomcat6下,CATALINA_HOME目录中,而/var/lib/tomcat6是CATALINA_BASE目录。

18

我认为这是一个好问题。

我也觉得很困惑。几分钟前我安装了Tomcat,然后发现它们有两个不同的“webapps”位置。

在 /usr/share/tomcat6/webapps/default_root/ 在 /var/lib/tomcat6/webapps/ROOT/

两者的内容相同,但都不是符号链接。

当我启动Tomcat时,它显示:

引用:

这是默认的Tomcat主页。它可以在本地文件系统上找到:/var/lib/tomcat6/webapps/ROOT/index.html

Tomcat6老手可能会高兴地发现,该Tomcat系统实例的CATALINA_HOME安装在/usr/share/tomcat6中,而CATALINA_BASE安装在/var/lib/tomcat6中。因此,基于这些信息,/usr/share/... 文件夹是为向后兼容而保留的,对吗?

但根据您发布的内容,库被读取自CATALINA_HOME而不是CATALINA_BASE。

也许他们仍然保留了这个默认引用,以防止其他系统在更新后停止工作?

好的观察!

更新:

我在 /usr/share/tomcat6/bin/catalina.sh 中读到了这个:

引用:

# 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.

当我们阅读/etc/init.d/tomcat6时:

(在开头处)

CATALINA_HOME=/usr/share/$NAME

(then...)

# Directory for per-instance configuration files and webapps
CATALINA_BASE=/var/lib/$NAME

但是,如果您尝试手动启动TOMCAT(就像我很久以前做的那样)使用以下命令:

sudo /usr/share/tomcat6/bin/startup.sh

将显示以下内容:

引用:

Using CATALINA_BASE: /usr/share/tomcat6
Using CATALINA_HOME: /usr/share/tomcat6
Using CATALINA_TMPDIR: /usr/share/tomcat6/temp
Using JRE_HOME: /usr
touch: cannot touch `/usr/share/tomcat6/logs/catalina.out': No such file or directory
/usr/share/tomcat6/bin/catalina.sh: 357: cannot create /usr/share/tomcat6/logs/catalina.out: Directory nonexistent

为什么在这里将CATALINA_BASE设置为与CATALINA_HOME相同呢?

/usr/share/tomcat6/logs/不存在,但在/var/lib/tomcat6/logs/中存在。

我发现当从init.d脚本启动Tomcat时,我的日志会写入到/var/lib/... ,所以最好从那里启动它。

6个回答

16

我并非Tomcat专家,但我曾经遇到过相同的问题,最终通过以下命令重启了服务器:

sudo /etc/init.d/tomcat6 restart

4

CATALINA_HOME -- 这个变量告诉 "org.apache.catalina.startup.Bootstrap" 在哪里寻找所需的 /lib /bin 和其他依赖项,以运行服务器。它基本上是您Tomcat的安装主目录。

CATALINA_BASE -- 需要特定的目录结构扫描(一旦启动),例如 /conf 目录下的 server.xml 和 web.xml 文件,这是特定于Web应用程序的文件。只要您拥有该目录结构和内容,CATALINA_BASE 就可以是任何目录。


1

我看过了。

正确而可爱的方法是在您的CATALINA_HOME/bin文件夹中创建一个“setenv.sh”脚本(在您的情况下为“/usr/share/tomcat6/bin/setenv.sh”)。

您的setenv.sh内容:

#!/bin/sh
export CATALINA_BASE=/new/catalinabase/path

因此,您无需自行修改catalina.sh。如果bin目录中存在setenv.sh,则catalina.sh将自动执行它。


0

我无法告诉你为什么startup.sh(或catalina.sh)中的CATALINA_HOME和CATALINA_BASE是相同的 - 这真的很奇怪。

当然,您可以通过init.d脚本启动Tomcat。但有时您可能希望通过startup.sh / catalina.sh启动它(例如进行调试)。

因此,作为解决方法/黑客,您可以在/usr/share/tomcat6/bin/catalina.sh开头添加以下行以纠正问题

export CATALINA_BASE=/var/lib/tomcat6

-1
我可以通过执行以下命令来完成这个任务: $ service tomcat6 start 这将重新初始化我的 CATALINA_*路径并启动tomcat实例。

-3
chmod +x startup.sh
chmod +x shutdown.sh
chmod +x catalina.sh
chmod +x setclasspath.sh
chmod +x bootstrap.jar
chmod +x tomcat-jni.jar

希望它能够工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接