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