Oct 302016
 

以前「CATALINA_BASEを分けてTomcatを複数サービス化」のような記事を書いたのですが、CentOS 7やRed Hat 7のtomcatパッケージでこちらを実装してみます。

CentOS 7/Red Hat 7のtomcatパッケージには2種類のsystemd.execファイルが用意されています。

[root@localhost ~]# ls /usr/lib/systemd/system/tomcat*
/usr/lib/systemd/system/tomcat.service
/usr/lib/systemd/system/tomcat@.service
[root@localhost ~]#

tomcat@.serviceの先頭に以下の記述があり、こちらの手順を模倣するとcatalina.baseの分離ができそうなので早速やってみます。

# Systemd unit file for tomcat instances.
#
# To create clones of this service:
# 0. systemctl enable tomcat@name.service
# 1. create catalina.base directory structure in
# /var/lib/tomcats/name
# 2. profit.

まずはnameにinst1を指定してenableにしてみます。

[root@localhost ~]# systemctl enable tomcat@inst1.service
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat@inst1.service to /usr/lib/systemd/system/tomcat@.service.
[root@localhost ~]#

次に/var/lib/tomcats以下にcatalina.baseディレクトリを用意してパッケージデフォルトの内容をコピーします。

[root@localhost ~]# mkdir /var/lib/tomcats/inst1 && cd /var/lib/tomcats/inst1
[root@localhost inst1]# cp -pr /etc/tomcat conf
[root@localhost inst1]# cp -pr /var/log/tomcat logs
[root@localhost inst1]# cp -pr /var/cache/tomcat/temp .
[root@localhost inst1]# cp -pr /var/cache/tomcat/work .
[root@localhost inst1]# cp -pr /var/lib/tomcat/webapps .

webapps以下の不要なアプリケーションは削除します。

catalina.baseを指定する設定ファイルは/etc/sysconfig/tomcat@inst1として用意します。
これは/etc/tomcat/tomcat.confの先頭に説明があります。

# System-wide configuration file for tomcat services
# This will be loaded by systemd as an environment file,
# so please keep the syntax.
#
# There are 2 “classes” of startup behavior in this package.
# The old one, the default service named tomcat.service.
# The new named instances are called tomcat@instance.service.
#
# Use this file to change default values for all services.
# Change the service specific ones to affect only one service.
# For tomcat.service it’s /etc/sysconfig/tomcat, for
# tomcat@instance it’s /etc/sysconfig/tomcat@instance.

ファイルを作成してCATALINA_BASEとCATALINA_TMPDIRを設定します。

[root@localhost ~]# cp -p /etc/sysconfig/tomcat /etc/sysconfig/tomcat\@inst1
[root@localhost ~]# echo "CATALINA_BASE=\"/var/lib/tomcats/inst1\"" >> /etc/sysconfig/tomcat\@inst1
[root@localhost ~]# echo "CATALINA_TMPDIR=\"/var/lib/tomcats/inst1/temp\"" >> /etc/sysconfig/tomcat\@inst1

サービスを起動してみます。

[root@localhost ~]# systemctl start tomcat@inst1

catalina.baseやjava.io.tmpdirが分離された状態で起動されていることが確認できます。

/usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/var/lib/tomcats/inst1 -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/lib/tomcats/inst1/temp -Djava.util.logging.config.file=/var/lib/tomcats/inst1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start

利用するポート番号変更などインスタンス個別の設定は、/var/lib/tomcats/inst1/conf以下を編集することで対応できます。

Sorry, the comment form is closed at this time.