我的tomcat使用错误的JAVA_HOME或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 。 我很困惑。

任何帮助和build议将明白。

提前致谢。

这听起来像“sudo”不是通过你的JAVA_HOME和JAVA_PATH到子进程。

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

我建议你仔细阅读“sudo”和“sudoers”的手册条目,然后阅读你的系统的“/ etc / sudoers”文件来理解它的行为。


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

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

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

正如我已经在评论中所述,我强烈建议您使用软件包系统来安装软件,它可以在存储库中使用。 (加上有几乎所有的ppa的)。 这样,你将保持你的系统整洁,你不会担心事情不工作(通常)。

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

 apt-get install tomcat7 

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

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

我知道我其实不回答你的问题与环境变量。 但是使用建议的方式,你将不会面对这个问题。