2

サーバー(Ubuntu 12.04)にSSHで接続しましたが、JAVA_HOMEとJRE_HOMEに何を設定しても、tomcat6は起動したくありません。

me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ echo $JAVA_HOME
/usr/lib/jvm/jdk-oracle.1.6.0_33/bin

me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ echo $JRE_HOME
/usr/lib/jvm/jdk-oracle.1.6.0_33/jre

me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ sudo service tomcat6 start
 * no JDK found - please set JAVA_HOME

me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ export JAVA_HOME=/usr/lib/jvm/jdk-oracle.1.6.0_33

me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ sudo service tomcat6 start
 * no JDK found - please set JAVA_HOME

me@myserver:/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

me@myserver:/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スクリプトの抜粋です(私は書きませんでした):

# 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

私のJAVA_HOME変数がoracleのjavaを使用するように設定されていても、愚かなTomcatがopenjdkを見つけて使用し続けたため、/ usr / lib/jvmからopenjdkを削除する必要がありました。

助けてください?これを修正する方法がわかりません。私は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が起動し、OracleJavaで実行されました。これはうまくいくと思いますが、それが最善の方法ではありませんでした。

編集:

StephenC:

me@myserver:/usr/lib/jvm$ sudo bash
root@myserver:/usr/lib/jvm# echo $JAVA_HOME
/usr/lib/jvm/jdk-oracle.1.6.0_33
4

1 に答える 1

4

これを試して:

sudo bash
echo $JAVA_HOME

問題は $JAVA_HOME環境変数がsudo実行中のコマンドに渡されていないことだと思います。 手動入力は確かにそうではないことを意味します!! (あなたの実験はそうではないことを暗示しているようですが、何か他のものが物事を混乱させているのではないかと思います...)

これに対する最善の長期的な修正方法はわかりませんが、代替案は次のとおりです。

  • catalina.shスクリプトで$JAVA_HOMEを設定する
  • tomcatinit.dスクリプトで$JAVA_HOMEを設定する
  • 一部のディストリビューションには、ディストリビューションが提供するすべてのサービス起動スクリプトが/etc内のファイルからローカル構成のオーバーライドを取得するという規則があります...
  • 「tomcat」ユーザーのシェルRCファイルに$JAVA_HOMEを設定する(おそらく悪い考えです)
  • $ JAVA_HOMEが渡されるようにsudoers構成を微調整します(間違いなく悪い考えです!)
  • 「-E」オプションの使用..。

IMO、サービスを起動するときに$JAVA_HOME環境変数に依存することはお勧めできません誤って間違ったJDKを忘れて起動する可能性があります。自身を守る。

于 2013-02-03T00:46:10.253 に答える