2013-02-03 33 views
2

我SSH方式登錄我的服務器(Ubuntu的12.04),並不管我了JAVA_HOME和JRE_HOME tomcat6中設置不想要開始:的Tomcat6沒有JDK中存在

[email protected]:/usr/lib/jvm/jdk-oracle.1.6.0_33$ echo $JAVA_HOME 
/usr/lib/jvm/jdk-oracle.1.6.0_33/bin 

[email protected]:/usr/lib/jvm/jdk-oracle.1.6.0_33$ echo $JRE_HOME 
/usr/lib/jvm/jdk-oracle.1.6.0_33/jre 

[email protected]:/usr/lib/jvm/jdk-oracle.1.6.0_33$ sudo service tomcat6 start 
* no JDK found - please set JAVA_HOME 

[email protected]:/usr/lib/jvm/jdk-oracle.1.6.0_33$ export JAVA_HOME=/usr/lib/jvm/jdk-oracle.1.6.0_33 

[email protected]:/usr/lib/jvm/jdk-oracle.1.6.0_33$ sudo service tomcat6 start 
* no JDK found - please set JAVA_HOME 

[email protected]:/usr/lib/jvm/jdk-oracle.1.6.0_33$ ls $JAVA_HOME 
bin  db  jre LICENSE README.html register_ja.html  src.zip 
COPYRIGHT include lib man  register.html register_zh_CN.html THIRDPARTYLICENSEREADME.txt 

[email protected]:/usr/lib/jvm/jdk-oracle.1.6.0_33$ ls $JAVA_HOME/bin 
appletviewer HtmlConverter java  javap  jdb jps   jstat  native2ascii rmic   serialver wsgen 
apt   idlj   javac javaws jhat jrunscript jstatd  orbd   rmid   servertool wsimport 
ControlPanel jar   javadoc jconsole jinfo jsadebugd jvisualvm pack200  rmiregistry tnameserv xjc 
extcheck  jarsigner  javah jcontrol jmap jstack  keytool policytool schemagen unpack200 

我一直在尋找的tomcat6的init.d腳本,並且我找到了一些自定義邏輯來搜索openjdk。我不想使用openjdk,我故意安裝oracle!這裏的腳本init.d中的SNIPPIT(我沒有寫):

# this is a work-around until there is a suitable runtime replacement 
# for dpkg-architecture for arch:all packages 
# this function sets the variable OPENJDKS 
find_openjdks() 
{ 
     for jvmdir in /usr/lib/jvm/java-7-openjdk-* 
     do 
       if [ -d "${jvmdir}" -a "${jvmdir}" != "/usr/lib/jvm/java-7-openjdk-common" ] 
       then 
         OPENJDKS=$jvmdir 
       fi 
     done 
     for jvmdir in /usr/lib/jvm/java-6-openjdk-* 
     do 
       if [ -d "${jvmdir}" -a "${jvmdir}" != "/usr/lib/jvm/java-6-openjdk-common" ] 
       then 
         OPENJDKS="${OPENJDKS} ${jvmdir}" 
       fi 
     done 
} 

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not 
# defined in $DEFAULT) 

OPENJDKS="" 
find_openjdks 
JDK_DIRS="/usr/lib/jvm/default-java ${OPENJDKS} /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" 

# Look for the right JVM to use 
for jdir in $JDK_DIRS; do 
    if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then 
     JAVA_HOME="$jdir" 
    fi 
done 
export JAVA_HOME 

,我不得不刪除從/ usr/lib中/ JVM OpenJDK的,因爲愚蠢的tomcat不斷髮現它和使用它,即使我的JAVA_HOME變量被設置爲使用oracle的java。

請幫忙嗎?我不知道如何解決這個問題。我使用Maven和Maven的方式完美地處理了我設置JAVA_HOME變量的方式。

編輯:

我打開的init.d tomcat的腳本,並改變了這一行:

JDK_DIRS="/usr/lib/jvm/default-java ${OPENJDKS} /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" 

這樣:

JDK_DIRS="/usr/lib/jvm/jdk-oracle.1.6.0_33 /usr/lib/jvm/default-java ${OPENJDKS} /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" 

(我只是說我的道路/usr/lib/jvm/jdk-oracle.1.6.0_33到字符串) 突然用tomcat啓動並運行我的oracle java。我猜這是有效的,但這不可能是最好的辦法。

編輯:

StephenC:

[email protected]:/usr/lib/jvm$ sudo bash 
[email protected]:/usr/lib/jvm# echo $JAVA_HOME 
/usr/lib/jvm/jdk-oracle.1.6.0_33 

回答

4

試試這個:

sudo bash 
echo $JAVA_HOME 

我懷疑問題是 $ JAVA_HOME環境變量沒有被穿過sudo到它正在運行的命令。 手冊條目肯定意味着它不會是!(您的實驗似乎另有暗示,但我懷疑,其他的東西是令人困惑的事情...)

我不知道什麼是最好的長期修復這一點,但在替代方案包括:

  • 在catalina.sh腳本設置$ JAVA_HOME
  • 在tomcat的init.d腳本
  • 設置$ JAVA_HOME
  • 一些發行版有一個約定,所有發行版提供的服務啓動腳本從文件拿起本地配置覆蓋/ etc ...
  • Set ting $ JAVA_HOME在「tomcat」用戶的shell RC文件中(可能是個壞主意)
  • 調整sudoers配置以便傳遞$ JAVA_HOME(絕對是一個壞主意!)
  • 使用「-E」選項...

海事組織,這是一個壞主意,推出服務時,依靠 $ JAVA_HOME環境變量。有可能你會忘記並錯誤地用錯誤的JDK啓動。保護你自己。

+0

從技術上講,它應該是真正的tomcat6用戶將啓動java(不是root),那麼環境變量是爲我設置的,但不是tomcat6用戶?我嘗試用'sudo su - tomcat6'作爲tomcat6登錄,但是當我執行該命令時沒有任何反應。 – Ring

+0

技術上,是的。但問題是一樣的。當您使用'su'或'sudo'時,環境變量設置不會(通常)傳遞。 (有命令選項可以覆蓋...閱讀相應的手冊條目。) –

+0

「sudo nano/etc/default/tomcat6」並添加 「JAVA_HOME =/usr/lib/jvm/jdk-oracle.1.6.0_33」 –