Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
54
Help us understand the problem. What is going on with this article?
@Monota

CentOS7 での Tomcat8 の自動起動設定

More than 5 years have passed since last update.

前回に引き続き、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の起動が遅い問題対策。」に詳しく書かれている。

54
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Monota
見習いアーキテクトです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
54
Help us understand the problem. What is going on with this article?