OSS Fan ~OSSでLinuxサーバ構築~

このエントリーをはてなブックマークに追加

Tomcat 9.0.1をAWSのEC2(RHEL 7.4)へインストールし、Systemdで起動を管理する設定

カテゴリ:OSSセットアップ | ソフトウェア:Tomcat | タグ:
最終更新日:2021/01/03 | 公開日:2017/10/23

目次

概要

 AWSのEC2インスタンス(OSはRHEL 7.4)にTomcatをインストールします。 RHEL 7.4のyumリポジトリにもTomcatが含まれていますが、バージョンが7と古いため、 Apacheソフトウェア財団のウェブサイトから(2017年10月22日時点で)最新のバージョン9.0.1をダウンロードしてインストールしました。 ただ、逆に新し過ぎてこの時点ではまだベータ版でしたので、正式版になった時点で再インストールすることをお勧めします。 同じ手順でインストールできると思います(たぶん)。 Apacheソフトウェア財団のサイトで配布されているtar.gz形式のファイルでインストールを行うと、基本的にはファイルをただ解凍するだけという お手軽インストールができますが、Systemdで起動を管理するためのサービスユニットファイルがインストールされません。 そのため、個別に手動で作成しています。

構成

想定環境

 AWS(Amazon Web Services)のEC2インスタンスを準備し、Tomcatをインストールました。 参考までに、サーバのスペックは以下のとおりです。

■サーバスペック
項目内容
インスタンスタイプt2.micro
vCPU1
メモリ1GB
ディスクSSD 10GiB
リージョン日本

サーバ構成

OSバージョン

Red Hat Enterprise Linux 7.4 x86_64

ソフトウェア・パッケージ一覧

  • apache-tomcat-9.0.1.tar.gz
  • jdk-8u131-linux-x64.rpm

クライアント構成

OSバージョン

Windows 10 Pro 64bit

ソフトウェア・パッケージ一覧

  • Microsoft Edge 40.15063.674.0

環境構築

インストール

wgetパッケージのインストール

 Oracle JDKとTomcatのインストールモジュールをインターネットから取得するために、 wgetパッケージをインストールします。

$ sudo su -
Last login: Tue Aug 29 13:31:01 UTC 2017 on pts/0
# yum install -y wget
Loaded plugins: amazon-id, rhui-lb, search-disabled-repos
epel/x86_64/metalink                                                                             | 6.9 kB  00:00:00
epel                                                                                             | 4.3 kB  00:00:00
rhui-REGION-client-config-server-7                                                               | 2.9 kB  00:00:00
rhui-REGION-rhel-server-releases                                                                 | 3.5 kB  00:00:00
rhui-REGION-rhel-server-rh-common                                                                | 3.8 kB  00:00:00
(1/4): epel/x86_64/updateinfo                                                                    | 840 kB  00:00:00
(2/4): rhui-REGION-rhel-server-releases/7Server/x86_64/updateinfo                                | 2.3 MB  00:00:00
(3/4): epel/x86_64/primary_db                                                                    | 4.8 MB  00:00:00
(4/4): rhui-REGION-rhel-server-releases/7Server/x86_64/primary_db                                |  43 MB  00:00:01
Resolving Dependencies
--> Running transaction check
---> Package wget.x86_64 0:1.14-15.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package            Arch                 Version                   Repository                                      Size
========================================================================================================================
Installing:
 wget               x86_64               1.14-15.el7               rhui-REGION-rhel-server-releases               547 k

Transaction Summary
========================================================================================================================
Install  1 Package

Total download size: 547 k
Installed size: 2.0 M
Downloading packages:
wget-1.14-15.el7.x86_64.rpm                                                                      | 547 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : wget-1.14-15.el7.x86_64                                                                              1/1
  Verifying  : wget-1.14-15.el7.x86_64                                                                              1/1

Installed:
  wget.x86_64 0:1.14-15.el7

Complete!

gccパッケージのインストール

 Tomcatはインストールモジュールに同梱されているjsvcツールを利用することで、 デーモンとして起動することができます。jsvcツールはソースコードのみが同梱されており、 環境に合わせてコンパイルする必要があるため、gccをインストールします。

# yum install -y gcc
Loaded plugins: amazon-id, rhui-lb, search-disabled-repos
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.8.5-16.el7 will be installed
--> Processing Dependency: cpp = 4.8.5-16.el7 for package: gcc-4.8.5-16.el7.x86_64
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc-4.8.5-16.el7.x86_64
--> Processing Dependency: libmpc.so.3()(64bit) for package: gcc-4.8.5-16.el7.x86_64
--> Processing Dependency: libmpfr.so.4()(64bit) for package: gcc-4.8.5-16.el7.x86_64
--> Running transaction check
---> Package cpp.x86_64 0:4.8.5-16.el7 will be installed
---> Package glibc-devel.x86_64 0:2.17-196.el7 will be installed
--> Processing Dependency: glibc-headers = 2.17-196.el7 for package: glibc-devel-2.17-196.el7.x86_64
--> Processing Dependency: glibc-headers for package: glibc-devel-2.17-196.el7.x86_64
---> Package libmpc.x86_64 0:1.0.1-3.el7 will be installed
---> Package mpfr.x86_64 0:3.1.1-4.el7 will be installed
--> Running transaction check
---> Package glibc-headers.x86_64 0:2.17-196.el7 will be installed
--> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2.17-196.el7.x86_64
--> Processing Dependency: kernel-headers for package: glibc-headers-2.17-196.el7.x86_64
--> Running transaction check
---> Package kernel-headers.x86_64 0:3.10.0-693.2.2.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package                 Arch            Version                        Repository                                 Size
========================================================================================================================
Installing:
 gcc                     x86_64          4.8.5-16.el7                   rhui-REGION-rhel-server-releases           16 M
Installing for dependencies:
 cpp                     x86_64          4.8.5-16.el7                   rhui-REGION-rhel-server-releases          5.9 M
 glibc-devel             x86_64          2.17-196.el7                   rhui-REGION-rhel-server-releases          1.1 M
 glibc-headers           x86_64          2.17-196.el7                   rhui-REGION-rhel-server-releases          675 k
 kernel-headers          x86_64          3.10.0-693.2.2.el7             rhui-REGION-rhel-server-releases          6.0 M
 libmpc                  x86_64          1.0.1-3.el7                    rhui-REGION-rhel-server-releases           51 k
 mpfr                    x86_64          3.1.1-4.el7                    rhui-REGION-rhel-server-releases          203 k

Transaction Summary
========================================================================================================================
Install  1 Package (+6 Dependent packages)

Total download size: 30 M
Installed size: 60 M
Downloading packages:
(1/7): cpp-4.8.5-16.el7.x86_64.rpm                                                               | 5.9 MB  00:00:00
(2/7): glibc-devel-2.17-196.el7.x86_64.rpm                                                       | 1.1 MB  00:00:00
(3/7): glibc-headers-2.17-196.el7.x86_64.rpm                                                     | 675 kB  00:00:00
(4/7): gcc-4.8.5-16.el7.x86_64.rpm                                                               |  16 MB  00:00:00
(5/7): libmpc-1.0.1-3.el7.x86_64.rpm                                                             |  51 kB  00:00:00
(6/7): kernel-headers-3.10.0-693.2.2.el7.x86_64.rpm                                              | 6.0 MB  00:00:00
(7/7): mpfr-3.1.1-4.el7.x86_64.rpm                                                               | 203 kB  00:00:00
------------------------------------------------------------------------------------------------------------------------
Total                                                                                    29 MB/s |  30 MB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : mpfr-3.1.1-4.el7.x86_64                                                                              1/7
  Installing : libmpc-1.0.1-3.el7.x86_64                                                                            2/7
  Installing : cpp-4.8.5-16.el7.x86_64                                                                              3/7
  Installing : kernel-headers-3.10.0-693.2.2.el7.x86_64                                                             4/7
  Installing : glibc-headers-2.17-196.el7.x86_64                                                                    5/7
  Installing : glibc-devel-2.17-196.el7.x86_64                                                                      6/7
  Installing : gcc-4.8.5-16.el7.x86_64                                                                              7/7
  Verifying  : kernel-headers-3.10.0-693.2.2.el7.x86_64                                                             1/7
  Verifying  : mpfr-3.1.1-4.el7.x86_64                                                                              2/7
  Verifying  : glibc-headers-2.17-196.el7.x86_64                                                                    3/7
  Verifying  : cpp-4.8.5-16.el7.x86_64                                                                              4/7
  Verifying  : gcc-4.8.5-16.el7.x86_64                                                                              5/7
  Verifying  : glibc-devel-2.17-196.el7.x86_64                                                                      6/7
  Verifying  : libmpc-1.0.1-3.el7.x86_64                                                                            7/7

Installed:
  gcc.x86_64 0:4.8.5-16.el7

Dependency Installed:
  cpp.x86_64 0:4.8.5-16.el7                    glibc-devel.x86_64 0:2.17-196.el7   glibc-headers.x86_64 0:2.17-196.el7
  kernel-headers.x86_64 0:3.10.0-693.2.2.el7   libmpc.x86_64 0:1.0.1-3.el7         mpfr.x86_64 0:3.1.1-4.el7

Complete!

Oracle JDKのインストールモジュールをダウンロード

 Oracle社のウェブサイトからOracle JDKのインストールモジュールをダウンロードします。 ダウンロードするファイルはrpm形式のものとします。

# cd /media/
# mkdir installer
# cd /media/installer/ ←インストールモジュールのダウンロード先
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm"
--2017-10-19 14:53:00--  http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
Resolving download.oracle.com (download.oracle.com)... 23.44.174.243, 23.44.174.249
Connecting to download.oracle.com (download.oracle.com)|23.44.174.243|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://edelivery.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm [following]
--2017-10-19 14:53:00--  https://edelivery.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
Resolving edelivery.oracle.com (edelivery.oracle.com)... 104.71.165.94, 2600:140b:7000:3b3::2d3e, 2600:140b:7000:380::2d3e
Connecting to edelivery.oracle.com (edelivery.oracle.com)|104.71.165.94|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm?AuthParam=1508424900_27aea12855497be886afee89a3836728 [following]
--2017-10-19 14:53:00--  http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm?AuthParam=1508424900_27aea12855497be886afee89a3836728
Connecting to download.oracle.com (download.oracle.com)|23.44.174.243|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 169983496 (162M) [application/x-redhat-package-manager]
Saving to: ‘jdk-8u131-linux-x64.rpm’

100%[==============================================================================>] 169,983,496 6.45MB/s   in 20s

2017-10-19 14:53:20 (8.25 MB/s) - ‘jdk-8u131-linux-x64.rpm’ saved [169983496/169983496]

#

Tomcatのインストールモジュールをダウンロード

 Apacheソフトウェア財団のウェブサイトからTomcatのインストールモジュールをダウンロードします。 インストールモジュールはzip形式とtar.gz形式で配布されていますが、今回はtar.gz形式の方を選択しました。

# wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-9/v9.0.1/bin/apache-tomcat-9.0.1.tar.gz
--2017-10-19 14:39:57--  http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-9/v9.0.1/bin/apache-tomcat-9.0.1.tar.gz
Resolving ftp.yz.yamagata-u.ac.jp (ftp.yz.yamagata-u.ac.jp)... 133.24.248.19, 133.24.248.16, 133.24.248.17, ...
Connecting to ftp.yz.yamagata-u.ac.jp (ftp.yz.yamagata-u.ac.jp)|133.24.248.19|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9397803 (9.0M) [application/x-gzip]
Saving to: ‘apache-tomcat-9.0.1.tar.gz’

100%[==============================================================================>] 9,397,803   16.3MB/s   in 0.6s

2017-10-19 14:39:58 (16.3 MB/s) - ‘apache-tomcat-9.0.1.tar.gz’ saved [9397803/9397803]

# ls -l
total 175180
-rw-r--r--. 1 root root   9397803 Sep 27 18:37 apache-tomcat-9.0.1.tar.gz
-rw-r--r--. 1 root root 169983496 Mar 15  2017 jdk-8u131-linux-x64.rpm

Oracle JDKのインストール

 ダウンロードしたrpmファイルをrpmコマンドでインストールします。 インストール後にjavaのバージョン表示コマンドを実行し、バージョンが表示されたら正常にインストールされています。

# rpm -ihv jdk-8u131-linux-x64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk1.8.0_131-2000:1.8.0_131-fcs  ################################# [100%]
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...
# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Tomcatのインストール

 ダウンロードしたtar.gz形式のファイルを/opt/ディレクトリ内に解凍します。

# tar zxvf apache-tomcat-9.0.1.tar.gz -C /opt/
apache-tomcat-9.0.1/conf/
apache-tomcat-9.0.1/conf/catalina.policy
apache-tomcat-9.0.1/conf/catalina.properties
apache-tomcat-9.0.1/conf/context.xml
apache-tomcat-9.0.1/conf/jaspic-providers.xml
(中略)
apache-tomcat-9.0.1/bin/setclasspath.sh
apache-tomcat-9.0.1/bin/shutdown.sh
apache-tomcat-9.0.1/bin/startup.sh
apache-tomcat-9.0.1/bin/tool-wrapper.sh
apache-tomcat-9.0.1/bin/version.sh

jsvcツールのコンパイル

 Tomcatをデーモンとして起動するためのjsvcというツールが標準で提供されています。 Tomcatをインストールするとjsvcツールのソースコードのみが同梱されているため、 利用するには環境に合わせてコンパイルする必要があります。 jsvcツールはこれまで使ったことがなかったのですが、 Systemdで起動・停止を行うためにTomcat標準のシェルスクリプトを利用しようとしたところ、 シェルスクリプト内でjsvcコマンドが使われていたので、準備することにしました。 jsvcツールのコンパイル後は jsvc というファイルが生成されますので、これを /opt/apache-tomcat-9.0.1/bin/ ディレクトリにコピーして配置します。

# cd /opt/apache-tomcat-9.0.1/bin/
# tar zxvf commons-daemon-native.tar.gz
commons-daemon-1.0.15-native-src/README
commons-daemon-1.0.15-native-src/LICENSE.txt
commons-daemon-1.0.15-native-src/NOTICE.txt
commons-daemon-1.0.15-native-src/RELEASE-NOTES.txt
commons-daemon-1.0.15-native-src/unix/
(中略)
commons-daemon-1.0.15-native-src/windows/resources/procrunr.ico
commons-daemon-1.0.15-native-src/windows/resources/procrunw.ico
commons-daemon-1.0.15-native-src/windows/resources/susers.bmp
commons-daemon-1.0.15-native-src/windows/apps/prunmgr/prunmgr.rc
commons-daemon-1.0.15-native-src/windows/apps/prunsrv/prunsrv.rc
# cd commons-daemon-1.0.15-native-src/unix/
# ./configure --with-java=/usr/java/latest
*** Current host ***
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking cached host system type... ok
*** C-Language compilation tools ***
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for ranlib... ranlib
checking for strip... strip
*** Host support ***
checking C flags dependant on host system type... ok
*** Java compilation tools ***
checking JAVA_HOME... /usr/java/latest
checking for JDK os include directory...  linux
gcc flags added
checking how to run the C preprocessor... gcc -E
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking sys/capability.h usability... no
checking sys/capability.h presence... no
checking for sys/capability.h... no
configure: WARNING: cannot find headers for libcap
*** Writing output files ***
configure: creating ./config.status
config.status: creating Makefile
config.status: creating Makedefs
config.status: creating native/Makefile
*** All done ***
Now you can issue "make"
# make
(cd native; make  all)
make[1]: Entering directory `/opt/apache-tomcat-9.0.1/bin/commons-daemon-1.0.15-native-src/unix/native'
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c jsvc-unix.c -o jsvc-unix.o
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c arguments.c -o arguments.o
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c debug.c -o debug.o
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c dso-dlfcn.c -o dso-dlfcn.o
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c dso-dyld.c -o dso-dyld.o
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c help.c -o help.o
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c home.c -o home.o
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c java.c -o java.o
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c location.c -o location.o
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c replace.c -o replace.o
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c locks.c -o locks.o
gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/latest/include -I/usr/java/latest/include/linux -c signals.c -o signals.o
ar cr libservice.a arguments.o debug.o dso-dlfcn.o dso-dyld.o help.o home.o java.o location.o replace.o locks.o signals.o
ranlib libservice.a
gcc   jsvc-unix.o libservice.a -ldl -lpthread -o ../jsvc
make[1]: Leaving directory `/opt/apache-tomcat-9.0.1/bin/commons-daemon-1.0.15-native-src/unix/native'
# cp -piv jsvc /opt/apache-tomcat-9.0.1/bin/
‘jsvc’ -> ‘/opt/apache-tomcat-9.0.1/bin/jsvc’
# cd /opt/apache-tomcat-9.0.1/bin/
# ls -l jsvc
-rwxr-xr-x. 1 root root 170512 Oct 19 15:21 jsvc

設定

tomcatユーザ・グループの作成

 Tomcatデーモンの起動ユーザとして tomcat という名のLinuxユーザを作成します。 また、インストールしたTomcat関連のプログラム、設定ファイルの所有者、所有グループを Linuxの tomcat ユーザ、tomcat グループとします。 以下では GID:10003のtomcatグループと、UID:10003のtomcatユーザを作成します。 GIDとUIDは任意ですので、既存のものと重複しないように自由に割り当ててください。

# groupadd -g 10003 tomcat
# tail -n 1 /etc/group
tomcat:x:10003: ←tomcatグループが作成された
# useradd -u 10003 -g 10003 tomcat
# tail -n 1 /etc/passwd
tomcat:x:10003:10003::/home/tomcat:/bin/bash ←tomcatユーザが作成された

Tomcat関連ファイルの所有者・所有グループ変更

 インストールしたTomcat関連ファイルの所有者をtomcatに、所有グループをtomcatに変更します。

# cd /opt/
# chown -R tomcat:tomcat apache-tomcat-9.0.1
# ls -l /opt/apache-tomcat-9.0.1/
total 92
drwxr-x---. 3 tomcat tomcat  4096 Oct 19 15:23 bin
drwx------. 2 tomcat tomcat   238 Sep 27 17:32 conf
drwxr-x---. 2 tomcat tomcat  4096 Oct 19 14:41 lib
-rw-r-----. 1 tomcat tomcat 57092 Sep 27 17:32 LICENSE
drwxr-x---. 2 tomcat tomcat     6 Sep 27 17:32 logs
-rw-r-----. 1 tomcat tomcat  1804 Sep 27 17:32 NOTICE
-rw-r-----. 1 tomcat tomcat  6705 Sep 27 17:32 RELEASE-NOTES
-rw-r-----. 1 tomcat tomcat 15946 Sep 27 17:32 RUNNING.txt
drwxr-x---. 2 tomcat tomcat    30 Oct 19 14:41 temp
drwxr-x---. 7 tomcat tomcat    81 Sep 27 17:32 webapps
drwxr-x---. 2 tomcat tomcat     6 Sep 27 17:32 work

TomcatのSystemd用サービスユニットファイル作成

 SystemdでTomcatの起動・停止を管理するには、Systemdのサービスユニットファイルが必要ですが、 Tomcatをインストールしても標準では準備されていないようだったので、新規に作成しました。

 なお、今回はApacheソフトウェア財団のウェブサイトから最新のTomcat 9をダウンロードしてインストールしましたが、 RHEL 7.4のyumリポジトリではTomcat 7が配布されています。試しにこのTomcat 7をインストールするとサービスユニットファイルが 同梱されていたため、ファイルの内容を参考にTomcat 9用のサービスユニットファイルを作成しました。

# cd /etc/systemd/system/
# vi tomcat.service
ファイル名:/etc/systemd/system/tomcat.service
※ファイルを新規作成※
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/opt/apache-tomcat-9.0.1/bin/daemon.sh start
ExecStop=/opt/apache-tomcat-9.0.1/bin/daemon.sh stop
SuccessExitStatus=143
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

TomcatのSystemd用設定ファイル作成

 Tomcatのサービスユニットファイルで利用している環境変数に値を設定するための 設定ファイルを作成します。 こちらもRHEL 7.4で配布されているTomcat 7のファイルを参考にして新規作成しました。

# cd /etc/sysconfig/
# vi tomcat
ファイル名:/etc/sysconfig/tomcat
※ファイルを新規作成※
# Where your java installation lives
JAVA_HOME="/usr/java/latest"

# Where your tomcat installation lives
CATALINA_BASE="/opt/apache-tomcat-9.0.1"
CATALINA_HOME="/opt/apache-tomcat-9.0.1"
#JASPER_HOME="/usr/share/tomcat"
#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"

# What user should run tomcat
TOMCAT_USER="tomcat"

# 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
#SHUTDOWN_WAIT="30"

# Whether to annoy the user with "attempting to shut down" messages or not
#SHUTDOWN_VERBOSE="false"

# Connector port is 8080 for this tomcat instance
#CONNECTOR_PORT="8080"

# If you wish to further customize your tomcat environment,
# put your own definitions here
# (i.e. LD_LIBRARY_PATH for some jdbc drivers)

Tomcatの起動

 SystemdからTomcatを起動します。

# systemctl status tomcat
● tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: disabled) ←自動起動無効
   Active: inactive (dead) ←停止状態
# systemctl start tomcat ←起動コマンド実行
# systemctl status tomcat
● tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: disabled) ←自動移動無効
   Active: active (running) since Sun 2017-10-22 09:11:09 UTC; 36min ago ←起動状態
  Process: 30540 ExecStart=/opt/apache-tomcat-9.0.1/bin/daemon.sh start (code=exited, status=0/SUCCESS)
 Main PID: 30548 (jsvc)
   CGroup: /system.slice/tomcat.service
           tq30548 jsvc.exec -java-home /usr/java/latest -user tomcat -pidfile /opt/apache-tomcat-9.0.1/logs/catalina...
           mq30549 jsvc.exec -java-home /usr/java/latest -user tomcat -pidfile /opt/apache-tomcat-9.0.1/logs/catalina...

Oct 22 09:11:04 ip-172-31-23-52.ap-northeast-1.compute.internal systemd[1]: Starting Apache Tomcat Web Application .....
Oct 22 09:11:09 ip-172-31-23-52.ap-northeast-1.compute.internal systemd[1]: Started Apache Tomcat Web Application C...r.
Hint: Some lines were ellipsized, use -l to show in full.

Tomcatの自動起動有効化

 Linux起動時に自動でTomcatが起動するよう設定します。

# systemctl enable tomcat ←自動起動の有効化
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /etc/systemd/system/tomcat.service.
# systemctl status tomcat
● tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled) ←自動起動有効
   Active: active (running) since Sun 2017-10-22 09:11:09 UTC; 36min ago ←起動状態
 Main PID: 30548 (jsvc)
   CGroup: /system.slice/tomcat.service
           tq30548 jsvc.exec -java-home /usr/java/latest -user tomcat -pidfile /opt/apache-tomcat-9.0.1/logs/catalina...
           mq30549 jsvc.exec -java-home /usr/java/latest -user tomcat -pidfile /opt/apache-tomcat-9.0.1/logs/catalina...

Oct 22 09:11:04 ip-172-31-23-52.ap-northeast-1.compute.internal systemd[1]: Starting Apache Tomcat Web Application .....
Oct 22 09:11:09 ip-172-31-23-52.ap-northeast-1.compute.internal systemd[1]: Started Apache Tomcat Web Application C...r.
Hint: Some lines were ellipsized, use -l to show in full.

プロセスの起動確認とTCPポートのリスニング確認

 SystemdからTomcatを起動することで、jsvcのプロセスが起動していることと、 jsvcのプロセスがTCPポートをリスニングしていることを確認します。

# ps -ef | grep tomcat ←プロセスの起動確認
tomcat   30548     1  0 09:11 ?        00:00:00 jsvc.exec -java-home /usr/java/latest -user tomcat -pidfile /opt/apache tomcat-9.0.1/logs/catalina-daemon.pid -wait 10 -outfile /opt/apache-tomcat-9.0.1/logs/catalina-daemon.out -errfile &1 -classpath /opt/apache-tomcat-9.0.1/bin/bootstrap.jar:/opt/apache-tomcat-9.0.1/bin/commons-daemon.jar:/opt/apache-tomcat-9.0.1/bin/tomcat-juli.jar -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcatalina.base=/opt/apache-tomcat-9.0.1 -Dcatalina.home=/opt/apache-tomcat-9.0.1 -Djava.io.tmpdir=/opt/apache-tomcat-9.0.1/temp org.apache.catalina.startup.Bootstrap
tomcat   30549 30548  0 09:11 ?        00:00:05 jsvc.exec -java-home /usr/java/latest -user tomcat -pidfile /opt/apache tomcat-9.0.1/logs/catalina-daemon.pid -wait 10 -outfile /opt/apache-tomcat-9.0.1/logs/catalina-daemon.out -errfile &1 -classpath /opt/apache-tomcat-9.0.1/bin/bootstrap.jar:/opt/apache-tomcat-9.0.1/bin/commons-daemon.jar:/opt/apache-tomcat-9.0.1/bin/tomcat-juli.jar -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcatalina.base=/opt/apache-tomcat-9.0.1 -Dcatalina.home=/opt/apache-tomcat-9.0.1 -Djava.io.tmpdir=/opt/apache-tomcat-9.0.1/temp org.apache.catalina.startup.Bootstrap
root     30642 29829  0 09:48 pts/1    00:00:00 grep --color=auto tomcat
# ss -tanp | grep jsvc ←TCPポートのリスニング確認
LISTEN     0      100         :::8080                    :::*                   users:(("jsvc",pid=30549,fd=50))
LISTEN     0      100         :::8009                    :::*                   users:(("jsvc",pid=30549,fd=55))

Tomcatの停止

 Tomcatの起動と同様にSystemdからTomcatを停止できることを確認します。

# systemctl stop tomcat ←停止コマンド実行
# systemctl status tomcat
● tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled) ←自動起動有効
   Active: inactive (dead) since Sun 2017-10-22 10:20:26 UTC; 23s ago ←停止状態
  Process: 30701 ExecStop=/opt/apache-tomcat-9.0.1/bin/daemon.sh stop (code=exited, status=0/SUCCESS)
 Main PID: 30548 (code=exited, status=0/SUCCESS)

Oct 22 09:11:04 ip-172-31-23-52.ap-northeast-1.compute.internal systemd[1]: Starting Apache Tomcat Web Application .....
Oct 22 09:11:09 ip-172-31-23-52.ap-northeast-1.compute.internal systemd[1]: Started Apache Tomcat Web Application C...r.
Oct 22 10:20:25 ip-172-31-23-52.ap-northeast-1.compute.internal systemd[1]: Stopping Apache Tomcat Web Application .....
Oct 22 10:20:26 ip-172-31-23-52.ap-northeast-1.compute.internal systemd[1]: Stopped Apache Tomcat Web Application C...r.
Hint: Some lines were ellipsized, use -l to show in full.
# ps -ef | grep tomcat ←プロセスの確認
root     30712 29829  0 10:25 pts/1    00:00:00 grep --color=auto tomcat

動作テスト

ブラウザからのアクセス確認

 Tomcatを起動します。既に起動している場合は不要です。

# systemctl start tomcat

 PCのブラウザ(今回はMicrosoft Edgeを利用)からTomcatがインストールされたサーバの FQDNとポート番号8080を指定してアクセスします。 以下の画面の例ではAWSのEC2で設定された「パブリック DNS (IPv4)」が「ec2-99-99-99-99.ap-northeast-1.compute.amazonaws.com」 だった場合のURLとなります。

URL例)
http://ec2-99-99-99-99.ap-northeast-1.compute.amazonaws.com:8080/

 以下のようなTomcat標準のQuick Start画面が表示されればインストール成功です。