wheezy-backports 中的 tomcat8 使用 configtest.sh 失败

wheezy-backports 中的 tomcat8 使用 configtest.sh 失败

我已经安装了tomcat8软件包wheezy-backports。我使用默认/未修改的安装,并具有以下预期:

  • 我使用 Oracle Java 8 JDK
  • 添加/etc/default/tomcat8JAVA_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_BASEet 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-jdkWARNINGSEVEREps-Dcatalina.base=/var/lib/tomcat8 -Dcatalina.home=/usr/share/tomcat8 -Djava.io.tmpdir=/tmp/tomcat8-tomcat8-tmp

相关内容