繁体   English   中英

我的tomcat使用了错误的JAVA_HOME或JRE_HOME

[英]my tomcat uses wrong JAVA_HOME or JRE_HOME

我是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 我很困惑。

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

提前致谢。

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

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

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


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

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

您确定,您必须以root身份运行脚本吗? 我不知道如何设置Tomcat,但通常将服务器作为专用用户而不是root用户运行是一种很好的做法。

正如我已在评论中说明的那样,我强烈建议您使用软件包系统来安装软件,它可以在存储库中找到。 (加上几乎所有东西都有ppa)。 这样你就可以保持你的系统整洁,你不会担心不起作用的东西(通常)。

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

apt-get install tomcat7

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

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

我知道我实际上没有用环境变量回答你的问题。 但是使用建议的方式,你不会开始面对这个问题。

总而言之,这意味着向/ etc / sudoers添加一行:

默认值env_keep + =“JAVA_HOME JRE_HOME”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM