前回に引き続き、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 設定ファイルに記述した EnvironmentFile
に JAVA_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
で終了してしまうから。停止スクリプト実行後にすぐにメインプロセスが停止するわけではないので、デフォルトの KillMode
の process
にしたがって systemd によって親プロセスが kill されてしまうのかもしれない?
環境変数ファイルの JAVA_OPTS
は Tomcat の起動が遅い問題に対処するために追加している。「CentOS6 tomcat7の起動が遅い問題対策。」に詳しく書かれている。