CentOS7 での Tomcat8 の自動起動設定

  • 40
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

前回に引き続き、CentOS7 に Tomcat8 をインストールする。
今回は仮想マシン起動時に Tomcat を自動起動するように設定したい。

systemd の設定ファイルの準備

以下のように Unit 設定ファイルを作成した。

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

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/opt/tomcat/apache-tomcat-8.0.17/bin/startup.sh
ExecStop=/opt/tomcat/apache-tomcat-8.0.17/bin/shutdown.sh
KillMode=none

[Install]
WantedBy=multi-user.target

ファイル名を tomcat.service として、/etc/systemd/system/ に配置する。

環境変数ファイルの準備

前回は .bash_profile に環境変数 JAVA_HOME を定義した。しかし systemd はここに設定した環境変数を読まない。そのため、今回は Unit 設定ファイルに記述した EnvironmentFileJAVA_HOME を定義する(※)。

/etc/sysconfig/tomcat という名前でファイルを作成する。中身は以下のようにする(export の記述は不要)。

JAVA_HOME="/opt/java/jdk1.8.0_31/"
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"

(※)別の Tomcat 固有の方法として、setenv.sh に環境変数を定義して tomcat の bin ディレクトリの下に配置するやり方もある(この場合は export の記述は必要)。

tomcat サービスの有効化

以下のコマンドで tomcat サービスを有効化する。2つめの start コマンドを実行する前に tomcat が停止している必要がある。

systemctl enable tomcat.service
systemctl start tomcat.service
systemctl status tomcat.service

成功していれば最後の status コマンドで以下のような出力になる。

tomcat.service - Apache Tomcat Servlet Container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled)
   Active: active (running) since 火 2015-01-27 21:36:46 JST; 1h 8min ago
  Process: 1493 ExecStart=/opt/tomcat/apache-tomcat-8.0.17/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 1989 (java)
   CGroup: /system.slice/tomcat.service
           └─1989 /opt/java/jdk1.8.0_31//bin/java -Djava.util.logging.config.file=/opt/tomcat/apache-tomcat-8.0.17/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava..

補足やはっきりわかっていない点など

Unit 設定ファイルで KillMode=none としているのは、これがないと systemctl stop tomcat.service 実行時に status=143 で終了してしまうから。停止スクリプト実行後にすぐにメインプロセスが停止するわけではないので、デフォルトの KillModeprocess にしたがって systemd によって親プロセスが kill されてしまうのかもしれない?

環境変数ファイルの JAVA_OPTS は Tomcat の起動が遅い問題に対処するために追加している。「CentOS6 tomcat7の起動が遅い問題対策。」に詳しく書かれている。