CentOS7でのOracleのJDKをインストールした場合のTomcatのJAVA_HOMEの設定

カテゴリ:Java

CentOS7など、Systemd環境でのTomcatの環境変数の設定について簡単に解説します。

起動時の環境変数の読み込みの仕組み

まず、Systemd環境では、Tomcatの自動起動はsystemctl enable tomcatを実行して有効にします。
その際、以下のように/usr/lib/systemd/system/tomcat.serviceが作成されます。
# systemctl enable tomcat
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.
/usr/lib/systemd/system/tomcat.serviceでは以下のように設定されています。
この中で、EnvironmentFileに指定されているファイル/etc/tomcat/tomcat.confを環境ファイルとして読み込みます。
# Systemd unit file for default tomcat
# 
# To create clones of this service:
# DO NOTHING, use tomcat@.service instead.

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=simple
EnvironmentFile=/etc/tomcat/tomcat.conf
Environment="NAME="
EnvironmentFile=-/etc/sysconfig/tomcat
ExecStart=/usr/libexec/tomcat/server start
SuccessExitStatus=143
User=tomcat

[Install]
WantedBy=multi-user.target

/etc/tomcat/tomcat.confとは

/etc/tomcat/tomcat.confファイルを開くと、JAVA_HOMEやCATALINA_HOMEなどのJava関連の環境変数が設定されていることが分かります。
# System-wide configuration file for tomcat services
# This will be loaded by systemd as an environment file,
# so please keep the syntax. For shell expansion support
# place your custom files as /etc/tomcat/conf.d/*.conf
#
# There are 2 "classes" of startup behavior in this package.
# The old one, the default service named tomcat.service.
# The new named instances are called tomcat@instance.service.
#
# Use this file to change default values for all services.
# Change the service specific ones to affect only one service.
# For tomcat.service it's /etc/sysconfig/tomcat, for
# tomcat@instance it's /etc/sysconfig/tomcat@instance.

# This variable is used to figure out if config is loaded or not.
TOMCAT_CFG_LOADED="1"

# In new-style instances, if CATALINA_BASE isn't specified, it will
# be constructed by joining TOMCATS_BASE and NAME.
TOMCATS_BASE="/var/lib/tomcats/"

# Where your java installation lives
JAVA_HOME="/usr/lib/jvm/jre"

# Where your tomcat installation lives
CATALINA_HOME="/usr/share/tomcat"

# System-wide tmp
CATALINA_TMPDIR="/var/cache/tomcat/temp"

# You can pass some parameters to java here if you wish to
#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3"

# Use JAVA_OPTS to set java.library.path for libtcnative.so
#JAVA_OPTS="-Djava.library.path=/usr/lib"

# You can change your tomcat locale here
#LANG="en_US"

# Run tomcat under the Java Security Manager
SECURITY_MANAGER="false"

# Time to wait in seconds, before killing process
# TODO(stingray): does nothing, fix.
# SHUTDOWN_WAIT="30"

# If you wish to further customize your tomcat environment,
# put your own definitions here
# (i.e. LD_LIBRARY_PATH for some jdbc drivers)
tomcat.confファイルについては冒頭に説明があります。
日本語訳すると以下になります。
これは、systemdによって環境ファイルとしてロードされるので、構文を保存してください。シェルの拡張をサポートするには、カスタムファイルを/etc/tomcat/conf.d/*.confに置きます。

このパッケージには、スタートアップ動作の2つの「クラス」があります。
tomcat.serviceという名前のデフォルトのサービスは古いものです。
新しい名前付きインスタンスの名前はtomcat@instance.serviceです。

このファイルを使用して、すべてのサービスのデフォルト値を変更します。
サービス固有のものを変更して、1つのサービスにのみ影響を与えます。
tomcat.serviceの場合は/etc/sysconfig/tomcat、tomcat@instanceの場合は/etc/sysconfig/tomcat@instanceです。

OS標準のJDKとTomcatをインストールしている場合は、初期設定のままで問題ありません。
初期設定でJAVA_HOMEに指定されている/usr/lib/jvm/jreはOS標準のOpenJDKへのパスです。
# ls -la /usr/lib/jvm/jre
lrwxrwxrwx 1 root root 21 Apr  8  2018 /usr/lib/jvm/jre -> /etc/alternatives/jre
# ls -ls /etc/alternatives/jre
0 lrwxrwxrwx 1 root root 64 Apr  8  2018 /etc/alternatives/jre -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre
しかし、OracleのJDKを使用する場合、JAVA_HOMEの値に/usr/java/defaultを指定する必要があります。

/usr/java/defaultとは

/usr/java/配下のdefaultは/usr/java/latestへのシンボリックリンクになっています。
# ls -la /usr/java/
合計 12
drwxr-xr-x   3 root root 4096 11月  6 21:21 .
drwxr-xr-x. 14 root root 4096 11月  6 21:21 ..
lrwxrwxrwx   1 root root   16 11月  6 21:21 default -> /usr/java/latest
drwxr-xr-x   8 root root 4096 11月  6 21:21 jdk1.8.0_191-amd64
lrwxrwxrwx   1 root root   28 11月  6 21:21 latest -> /usr/java/jdk1.8.0_191-amd64
また、/usr/java/latestはOracleのJDKへのシンボリックリンクになっています。
# ls -la /usr/java/latest
lrwxrwxrwx 1 root root 28 11月  6 21:21 /usr/java/latest -> /usr/java/jdk1.8.0_191-amd64
ちなみに/usr/java/latestはalternativesで選択しているJDKへのシンボリックリンクになります。
# alternatives --config java

2 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*  1           /usr/java/jdk1.8.0_191-amd64/jre/bin/java
 + 2           /usr/java/jdk1.8.0_191-amd64/bin/java
JDKを切り替えたい場合は、alternatives --config javaコマンドを使用して選択するだけです。

公開日時: 2018年11月12日  21:06:45

Javaに戻る

「Java」に関する他のTips

このページのトップに戻る