TomcatはJAVA_HOMEを認識しません


15

Ubuntu 14.04サーバーをインストールし、JDK1.8u5とTomcat7を抽出し、.profileに次を追加しました(同様の[非]結果で.bashrcに追加しようとしました)。

export JAVA_HOME=/opt/java/jdk1.8.0_05
export PATH=$PATH:$JAVA_HOME/bin

実行するecho $JAVA_HOMEと、期待される結果が得られ/opt/java/jdk1.8.0_05ます。java -versionJavaを実行して、正しい応答を取得することもできます。ここまでは順調ですね。

だから今、私はTomcatを起動しようとしました(catalina.shも試してみました)、次のようになります:

user@ubuntu:~$ sudo /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

しかし...私はちょうど試してみましたがecho $JAVA_HOME、うまくいきましたか?

回答:


23

にヘルプテキストがありますcatalina.sh。ここで引用します。

#   Do not set the variables in this script. Instead put them into a script
#   setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" argument.

# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi

tomcat使用を開始するとcatalina.sh、ファイルsetenv.shを検索してソースを取得します。CATALINA_HOMEまたはで検索していCATALINA_BASEます。

だから、セットに良い方法JAVA_HOMEについては、tomcat次のとおりです。

  1. setenv.shfolder CATALINA_BASE/binに名前の付いたスクリプトがまだ存在しない場合は作成します。
  2. この行を追加します setenv.sh

    export JAVA_HOME=/opt/java/jdk1.8.0_05
  3. 実行可能にします。


このソリューションを使用する理由:

スクリプトで環境変数を設定する方が安全です。できるだけローカルに変数を設定するようにしてください。使用しない試してみてください/etc/environment/etc/profileあなたが本当にあれば、他はありません必要がありますGlobal Environment Variable。を設定JAVA_HOMEするsetenv.shjava、の異なるバージョンを必要とする異なるアプリケーションで異なるTomcatを使用できますが、1人のユーザーが実行します。他のユーザー環境は影響を受けません。


4

環境変数はスーパーユーザーではなく自分のユーザーに設定しているため、2つのオプションがあります。

  1. -E次のオプションを使用して変数をエクスポートする必要があります。

    sudo -E /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh

    これにより、コマンドの実行中にすべての環境変数がエクスポートされることに注意してください。rootとしてコマンドを実行すると通常のユーザー環境があふれるため、これは好ましくありません。これは望ましくありません。

  2. ルートの.bashrc /etc/enviromentファイルの変数をエクスポートします。ターミナルを開き、次を入力します。

    sudo nano /etc/environment

    管理パスワードを入力し、ファイルの最後に次の行を追加します。

    JAVA_HOME=/opt/java/jdk1.8.0_05
    PATH=$PATH:$JAVA_HOME/bin

    その後

    source /etc/environment

    または、マシンを再起動してから、使用していたコマンドを再試行します。


更新:

この回答は、ステップ2が機能せずsudo、環境をリセットし、安全なパスを提供する2つの理由として、すべてのグローバル変数がリセットされるヒントを提供しました。回避策は使用することです

sudo su

そして、設定された環境変数を使用するコマンドを実行します。


1
ありがとう@Jobin-オプション1が機能するので、私はあなたの答えを支持しました。ここで、オプション2をチェックします。これは、私の推奨するソリューションであり、機能する場合は、回答を受け入れます。
イザピル

/root/.bashrcあなたが提案したように、nanoでコマンドを追加しましたが、user@ubuntu:~$ source /root/.bashrc結果を呼び出し-bash: /root/.bashrc: Permission deniedてsudo yieldsで試してみましたsudo: source: command not found。この時点で、元のコマンドを再試行すると、バックポイント0に私をもたらします
isapir

@Igal:その問題を解決するために私の答えを編集しました。最初に使用sudo -iする必要がありますsource。それを指摘してくれてありがとう。
jobin

sudo -iさて、初心者の質問はご容赦ください。しかし、ソースと呼ばれたら、どうすれば終了できますか?私は、元のエラーメッセージを取得しています...終了せず
isapirを

@Igal:Ctrl + dを押すか、を入力しexitます。
jobin

0

私が探していた解決策は、EnvironmentVariables/etc/environment指定されているように、スクリプトを処理せず、変数を展開しないため、次の(エクスポートなしで)追加がトリックを行いました:

JAVA_HOME=/opt/java/jdk1.8.0_05

次に、変更を有効にするためにシステムを再起動しました。


0

ソースが取得されなかったため、tomcat7.serviceスクリプトにJAVA_HOMEを追加しましsetenv.shcatalina.sh

手順:

1.tomcat7サービススクリプトファイルを開く

sudo gedit /etc/init.d/tomcat7

2. JAVA_HOMEを設定する

.
.
.
JAVA_HOME=/usr/lib/jvm/java-8-oracle

# Directory where the Tomcat 6 binary distribution resides
CATALINA_HOME=/usr/share/$NAME

# Directory for per-instance configuration files and webapps
CATALINA_BASE=/var/lib/$NAME

# Use the Java security manager? (yes/no)
TOMCAT7_SECURITY=no

3.tomcat7サービスの開始

sudo service tomcat7 status

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.