【问题标题】:my tomcat uses wrong JAVA_HOME or JRE_HOME我的 tomcat 使用了错误的 JAVA_HOME 或 JRE_HOME
【发布时间】:2013-11-30 13:32:57
【问题描述】:

我是 Tomcat 的新手。他们对我的 ubuntu 10.10 上的 Tomcat 7 有问题。

当我像这样启动 Tomcat 时

llchli@llchli-virtual-machine:/usr/local/apache-tomcat-7.0.47/bin$ ./catalina.sh  run
Using CATALINA_BASE:   /usr/local/apache-tomcat-7.0.47
Using CATALINA_HOME:   /usr/local/apache-tomcat-7.0.47
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.47/temp
Using JRE_HOME:        /usr/local/jdk1.7.0_45
Using CLASSPATH:       /usr/local/apache-tomcat-7.0.47/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.47/bin/tomcat-juli.jar

虽然不能以这种方式启动 Tomcat,但它会回显Using JRE_Home /usr/local/jdk1.7.0_45,这在我的计算机上是正确的JAVA_HOMEJRE_HOME

但是当我像这样使用sudo 启动Tomcat时

llchli@llchli-virtual-machine:/usr/local/apache-tomcat-7.0.47/bin$ sudo ./catalina.sh  start
[sudo] password for llchli: 
Using CATALINA_BASE:   /usr/local/apache-tomcat-7.0.47
Using CATALINA_HOME:   /usr/local/apache-tomcat-7.0.47
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.47/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/apache-tomcat-7.0.47/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.47/bin/tomcat-juli.jar

它回显Using JRE_HOME: /usr,这在我的计算机上不是正确的JAVA_HOMEJRE_HOME。但它可以正确启动 Tomcat。

我的/etc/environment

llchli@llchli-virtual-machine:/usr/local/apache-tomcat-7.0.47/bin$ sudo cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/jdk1.7.0_45/bin"
LANGUAGE="en"
JAVA_HOME="/usr/local/jdk1.7.0_45"
CLASSPATH="$CLASSPATH:$JAVA_HOME/lib"
CATALINA_HOME="/usr/local/apache-tomcat-7.0.47"

对此我有点疑惑。而且当我像这样使用daemon.sh 时,它会产生错误。

llchli@llchli-virtual-machine:/usr/local/apache-tomcat-7.0.47/bin$ sudo ./daemon.sh run
Cannot find any VM in Java Home /usr
Cannot find any VM in Java Home /usr
Cannot locate JVM library file
Service exit with a return value of 1

它回显cannot find any VM in Java Home /usr。我很困惑。

任何帮助和建议将不胜感激。

提前致谢。

【问题讨论】:

  • 为什么不使用service tomcat7 start?您是否安装了tomact7 软件包?还是你手动安装的?
  • @ortang 我下载了 '.tar.gz' 文件并解压到 '/usr/local/'
  • 好的,所以你手动安装了,我建议你使用包系统。只有真的必须手动安装软件。这将使您的系统保持清洁,而且您不太可能更新您安装的安装(例如安全修复程序)。如果你使用这个包,一切都会开箱即用。
  • 只是调试该问题的提示:编辑脚本并添加set +x,使用env 显示当前环境。

标签: java linux tomcat ubuntu


【解决方案1】:

听起来“sudo”没有将您的 JAVA_HOME 和 JAVA_PATH 传递给子进程。

当您使用“sudo”运行命令时,环境变量会根据 sudoers 文件的说明进行设置。我对“sudoers”手册条目的阅读是默认设置是不传递变量。但根据“sudo”手册条目,有一个命令语法变体允许您使用“VAR=value”传递环境变量...

我建议您仔细阅读“sudo”和“sudoers”的手册条目,然后阅读系统的“/etc/sudoers”文件以了解其行为方式。


话虽如此,使用“sudo”从命令行启动服务并不是一个好主意,尤其是在您谈论“生产”服务时。而且您通常最好使用发行版打包提供的服务包装器,而不是“上游”项目的非打包安装。

【讨论】:

  • “/etc/environment”已经设置了系统范围的环境变量。所以“sudo”不会在“/etc/environment”文件中使用环境变量?
  • Lich - 你需要阅读手册页。他们会告诉你“sudo”会做什么。要回答您的问题,这取决于该文件是由 shell 初始化还是由 tomcat 脚本本身读取/获取的。当然,sh / bash 或 sudo 都不会(直接)读取该文件。
【解决方案2】:

Sudo 重置环境变量。当您运行 sudo 时,JRE_HOME 将重置为其默认值(可能为 null),并且 Tomcat 将采用自己的默认值 (/usr)。 您可以使用 -E 开关运行 sudo 以保护环境。

您确定必须以 root 身份运行脚本吗?我不知道如何设置 Tomcat,但以专用用户而不是 root 用户身份运行服务器通常是一个好习惯。

【讨论】:

    【解决方案3】:

    正如我在评论中所说,我强烈建议您使用软件包系统来安装软件,它在存储库中可用。 (加上几乎所有东西都有ppa)。这样一来,您将保持系统整洁,并且您不必担心(通常)无法正常工作。

    我的建议是删除您当前的手动安装并安装 tomcat7 包。

    apt-get install tomcat7
    

    如需进一步配置,请使用文件/etc/default/tomcat7。要启动/停止/重新启动,请使用命令 service tomcat7 {start|stop|restart}

    使用包 tomcat7,tomcat 实例将以它自己的用户身份运行,以 root 身份运行,这很好,因为服务不应该以用户身份运行完全权限。

    我知道我实际上并没有用环境变量回答您的问题。但是使用建议的方式,您一开始就不会遇到这个问题。

    【讨论】:

    • 我会试试的。但是这个问题让我很困惑。所以我想弄清楚。
    【解决方案4】:

    都说了,这意味着在 /etc/sudoers 中添加一行:

    默认 env_keep += "JAVA_HOME JRE_HOME"

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 1970-01-01
      • 2012-06-22
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 2019-09-14
      相关资源
      最近更新 更多