我已经安装了tomcat8
软件包wheezy-backports
。我使用默认/未修改的安装,并具有以下预期:
- 我使用 Oracle Java 8 JDK
- 添加
/etc/default/tomcat8
:JAVA_HOME=/usr/lib/jvm/java-8-oracle
我可以启动/停止 tomcat。但是会显示很多警告。使用 检查/usr/share/tomcat8/bin/configtest.sh
,输出为:
Using CATALINA_BASE: /usr/share/tomcat8
Using CATALINA_HOME: /usr/share/tomcat8
Using CATALINA_TMPDIR: /usr/share/tomcat8/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar
Jan 10, 2015 4:55:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat8/common/classes], exists: [false], isDirectory: [false], canRead: [false]
Jan 10, 2015 4:55:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat8/common], exists: [false], isDirectory: [false], canRead: [false]
Jan 10, 2015 4:55:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat8/server/classes], exists: [false], isDirectory: [false], canRead: [false]
Jan 10, 2015 4:55:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat8/server], exists: [false], isDirectory: [false], canRead: [false]
Jan 10, 2015 4:55:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat8/shared/classes], exists: [false], isDirectory: [false], canRead: [false]
Jan 10, 2015 4:55:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat8/shared], exists: [false], isDirectory: [false], canRead: [false]
Jan 10, 2015 4:55:40 PM org.apache.catalina.startup.Catalina initDirs
SEVERE: Cannot find specified temporary folder at /usr/share/tomcat8/temp
Jan 10, 2015 4:55:40 PM org.apache.catalina.startup.Catalina load
显然存在一些问题:)
- JRE_HOME 应该设置为 JAVA_HOME,但事实并非如此
- 缺少目录
- (从这个例子中看不清楚)日志记录无法正常工作(更改
/etc/tomcat8/logging.properties
无效。但设置是正确的(参见ps
输出)并且/var/lib/tomcat8/conf -> /etc/tomcat8
这里有什么问题?
更新
输出ps
(为便于阅读而编辑),在我看来看起来不错:
$ ps aux | grep java
tomcat8 15654 0.1 3.6 2643416 147024 ? Sl Jan10 1:42 /usr/lib/jvm/java-8-oracle/bin/java \
-Xmx1024m -XX:+UseConcMarkSweepGC \
-Djava.util.logging.config.file=/var/lib/tomcat8/conf/logging.properties \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
-Djava.awt.headless=true \
-Djava.endorsed.dirs=/usr/share/tomcat8/endorsed \
-classpath /usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar \
-Dcatalina.base=/var/lib/tomcat8 \
-Dcatalina.home=/usr/share/tomcat8 \
-Djava.io.tmpdir=/tmp/tomcat8-tomcat8-tmp
org.apache.catalina.startup.Bootstrap start
更新2
Ubuntu 上的 Tomcat 8 也有类似的问题,请参阅http://java.dzone.com/articles/vaadin-docker-a-novices-journey
答案1
我突然想到你看到这个仅有的当您运行 时configtest.sh
,有一个明显的原因:CATALINA_BASE
et al. 仅在 中设置/etc/init.d/tomcat8
。当我configtest.sh
像您一样运行时,我得到了相同的输出。
如果您希望以configtest
与守护进程相同的方式运行,您可能需要破解/etc/init.d/tomcat8
以接受该参数。出于某种原因,软件包维护者没有这样做。看起来您可能能够在运行之前手动设置环境变量configtest.sh
;我想catalina.sh
会选择它们。
这些WARNING: Problem with directory
行来自中设置的类加载器路径/etc/tomcat8/catalina.properties
。这可能只是 Debian 维护者留下的一些旧东西……以免破坏旧配置?并非所有内容都存在于当前的上游, 和之前已经讨论过了。
答案2
这是一个很长的故事。主要问题是,java 社区和 linux 社区创建了许多准标准、实践和惯例,而这些在各个方面都存在某种矛盾。
你能轻松集成 Java 和 Linux,但你必须学习两个都很多,你必须打破其中的很多。如果你只了解其中一个(java 或 linux 世界),你会发现自己身处一个清晰的世界,但你必须让自己永远保持肮脏。
您当前的问题这次不是环境变量问题,而是一个简单的“目录不存在”问题。避免此警告的最简单方法是手动创建缺失的 /usr/share/tomcat8/shared/classes 目录(尽管这与 Linux 惯例有点矛盾)。
该目录是标准 tomcat jvm 类加载器所需的路径,如果它保持为空,很可能不会造成任何损害。
也许您可以检查一下 Contents-amd64.gz,看看这个目录是否由其他软件包创建。如果是,请安装该软件包。
答案3
我在 Jessie LXC 上tomcat8
运行,得到了相同的结果,但没有任何不良影响。我没有得到。但我的行显示为...... ....openjdk-8-jdk
WARNING
SEVERE
ps
-Dcatalina.base=/var/lib/tomcat8 -Dcatalina.home=/usr/share/tomcat8 -Djava.io.tmpdir=/tmp/tomcat8-tomcat8-tmp