19
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Tomcatのインストールと自動起動の設定

はじめに

使用した環境

  • OS
    • CentOS 7.7(1908)
  • Java(Amazon Corretto)
    • Java 1.8.0_242
  • Tomcat
    • Tomcat-9.0.30

Javaのインストール

  • Javaはこちらのページのリンク先から、Amazon Corretto8をダウンロードしました。
  • Amazon CorrettoはRPM形式が選択できるため、パッケージ管理がしやすいyumコマンドでインストールしています。
[root@akagi ~]# yum install -y https://corretto.aws/downloads/latest/amazon-corretto-8-x64-linux-jdk.rpm
[root@akagi ~]# java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment Corretto-8.242.08.1 (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM Corretto-8.242.08.1 (build 25.242-b08, mixed mode)

Tomcatのインストール

  • Tomcatはこちらのページのリンク先から、Tomcat9.0をダウンロードしました。
    • JavaとTomcatのバージョンの対応関係については、こちらのページの対応表が分かりやすいです。
    • yumコマンドでTomcatをインストールすることも出来ますが、Tomcatのバージョンが7.0とかなり古いため、今回はTomcatの公式サイトからダウンロードしました。
  • Tomcatはzip形式やtar.gz形式しか選べないため、tar.gzでダウンロードしたものを所定のフォルダに配置してから展開してインストールしています。
  • 最後にstartup.shshutdown.shを使って、Tomcatを正常に起動/停止できることを確認します。
Tomcatのインストール
[root@akagi ~]# wget https://www-eu.apache.org/dist/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30.tar.gz
[root@akagi ~]# mv apache-tomcat-9.0.30.tar.gz /usr/local/
[root@akagi ~]# cd /usr/local/
[root@akagi local]# tar zxvf apache-tomcat-9.0.30.tar.gz 
[root@akagi local]# ls
apache-tomcat-9.0.30         bin  games    lib    libexec  share
apache-tomcat-9.0.30.tar.gz  etc  include  lib64  sbin     src
Tomcatの起動と停止
[root@akagi local]# sh ./apache-tomcat-9.0.30/bin/startup.sh
Using CATALINA_BASE:   /usr/local/apache-tomcat-9.0.30
Using CATALINA_HOME:   /usr/local/apache-tomcat-9.0.30
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-9.0.30/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/apache-tomcat-9.0.30/bin/bootstrap.jar:/usr/local/apache-tomcat-9.0.30/bin/tomcat-juli.jar
Tomcat started.
[root@akagi local]# sh ./apache-tomcat-9.0.30/bin/shutdown.sh 
Using CATALINA_BASE:   /usr/local/apache-tomcat-9.0.30
Using CATALINA_HOME:   /usr/local/apache-tomcat-9.0.30
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-9.0.30/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/apache-tomcat-9.0.30/bin/bootstrap.jar:/usr/local/apache-tomcat-9.0.30/bin/tomcat-juli.jar

Tomcatの自動起動の設定

シンボリックリンクの追加

  • Tomcat9のインストールフォルダに対して、tomcat9というシンボリックリンクを付けます。
  • シンボリックリンクを付けておくことにより、例えばTomcatのバージョンを上げた場合にもシンボリックリンクの修正だけで済むため、後述するユニットファイルを修正せずに済みます。
シンボリックリンクの追加
[root@akagi local]# ln -s apache-tomcat-9.0.30 tomcat9
[root@akagi local]# ls -l | grep tomcat9
lrwxrwxrwx  1 root root       20  2月  2 13:40 tomcat9 -> apache-tomcat-9.0.30

Tomcatユーザーの作成

  • Tomcatを自動起動する際に利用するtomcatというユーザーを作成します。
  • この時、tomcatユーザーにはホームディレクトリは不要なので、useraddコマンドに-Mオプションを付けています。
Tomcatユーザーの作成
[root@akagi local]# useradd -M tomcat
[root@akagi local]# id tomcat
uid=1001(tomcat) gid=1001(tomcat) groups=1001(tomcat)

フォルダのパーミッション変更

  • 先程に作成したtomcatユーザーがTomcatを起動できるように、Tomcatのインストールフォルダ以下の権限を変えておきます。
フォルダのパーミッション変更
[root@akagi local]# chown tomcat:tomcat -R ./tomcat9/
[root@akagi local]# ls -l | grep tomcat
drwxr-xr-x  9 tomcat tomcat      220  1月 26 22:04 apache-tomcat-9.0.30
-rw-r--r--  1 root   root   11026056 12月  8 02:16 apache-tomcat-9.0.30.tar.gz
lrwxrwxrwx  1 root   root         20  2月  2 13:40 tomcat9 -> apache-tomcat-9.0.30

ユニットファイルの作成

  • tomcat9.serviceという名前で、systemd用のユニットファイルを作成します。
    • CentOS6系までははchkconfigを利用していましたが、CentOS7系からはsystemdという仕組みを使って自動起動を実現するのが一般的なようです。
tomcat9.service
[Unit]
Description=Apache Tomcat 9.0.30
ConditionPathExists=/usr/local/tomcat9

[Service]
User=tomcat
Group=tomcat
Type=oneshot

ExecStart=/usr/local/tomcat9/bin/startup.sh
ExecStop=/usr/local/tomcat9/bin/shutdown.sh
Restart=no
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
セクション オプション 説明
Unit Description このサービスを示す説明文。
Unit ConditionPathExists ユニットが開始する前に、ここで指定した絶対パス名が存在するかをチェックする。
Service User サービスを起動するユーザー。
Service Group サービスを起動するグループ。
Service Type サービスの起動完了の確認方法。デフォルト値のsimpleは、プロセスが起動した時点で起動完了とみなす。oneshotは一度だけ実行するサービスに用いる。
Service ExecStart サービスを起動するコマンド。
Service ExecStop サービスを停止するコマンド。
Service Restart サービス停止時の再起動条件。デフォルト値はno
Service RemainAfterExit プロセス起動後もステータスがActiveのままとなる。Type=oneshotの時に有用。
Install WantedBy 自動起動を有効化する「ランレベル」に相当する設定。multi-user.targetはランレベル3に相当。

ユニットファイルの配置

  • 作成したtomcat9.serviceを、/etc/systemd/system/以下に配置して、Tomcatが自動的に起動するように設定します。
  • systemctl list-unit-files...の結果がdisabledではなくbadとなっている場合は、下記の点を見直してください。
    • ファイルの権限:私は/etc/systemd/system/以下の他のファイルやディレクトリに合わせて755を付与しました。
    • 構文エラー:[{になっていたりすると、badとなってしまいます。
ユニットファイルの配置
[root@akagi ~]# chmod 755 tomcat9.service 
[root@akagi ~]# cp -a tomcat9.service /etc/systemd/system/
[root@akagi ~]# systemctl daemon-reload
[root@akagi ~]# systemctl list-unit-files --type=service | grep tomcat
tomcat9.service                               disabled

自動起動の設定

  • systemctl enable...で自動起動の設定をして、最後に自動起動設定を確認すれば完了です。
自動起動の設定
[root@akagi ~]# systemctl enable tomcat9
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat9.service to /etc/systemd/system/tomcat9.service.
[root@akagi ~]# systemctl list-unit-files -t service | grep tomcat9
tomcat9.service                               enabled 

関連記事

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
19
Help us understand the problem. What are the problem?