参考メモ/CentOS7のApache Tomcatパッケージについてメモ であんまりパッケージでtomcat入れるのが好きになれなくて(お仕事上の要件とは別腹です)、
参考メモ/CentOS7 の OpenJDK パッケージの構成メモ でもやっぱりあんまりパッケージでOpenJDK入れるのが好きになれなかったので(お仕事上の要件とは別腹です)、
Oracle Java SE (Java 8) を Oracle公式からtar.gzでインストールして手動でJAVA_HOMEとPATH調整し、Apache Tomcat も公式から apache-tomcat-8.0.32.tar.gz をDLして、手動でunitファイル作ってsystemdで管理してみます。
確認環境:64bit CentOS7
$ cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core)
※epelリポジトリ導入済み
Oracle Java SE (Java8) のインストールとJAVA_HOME, PATH調整
- Oracle Java SE (JDK8) を Oracle 公式ページよりtar.gzでDL
- http://www.oracle.com/technetwork/java/javase/downloads/index.html
- 今回は jdk-8u74-linux-x64.tar.gz をDL
-
tar zxf jdk-8u74-linux-x64.tar.gz
で展開 ->jdk1.8.0_74
ディレクトリの下にすべて展開される。 - rootユーザで
/opt/jdk1.8.0_74
に移動、なんかownerが変なIDになってたので、chown root.root -R /opt/jdk1.8.0_74
で全部rootに変更。 -
/etc/profile.d/
の下にopt_jvm.sh
というファイルを作成し、内容を後述のようにする。 - システム再起動し、ログインしてjavaのバージョンやパスを確認する。
#!/bin/sh
export JAVA_HOME=/opt/jdk1.8.0_74
export PATH=$JAVA_HOME/bin:$PATH
再起動→ログイン後のチェック:
[msakamoto@localhost ~]$ which java
/opt/jdk1.8.0_74/bin/java
[msakamoto@localhost ~]$ java -version
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
※ /etc/profile
に直接書くのは行儀が悪そう。/etc/profile
中に、下の方に /etc/profile.d/
以下の .sh を取り込むループがあったので、ここは空気を読んで /etc/profile.d/opt_jvm.sh
を作成してそこにローカルなカスタマイズを入れました。
Apache Tomcat 8 のインストールと動作確認
- Apache Tomcat バージョン8を公式ページよりtar.gzでDL
- http://tomcat.apache.org/
- apache-tomcat-8.0.32.tar.gz をDL
-
tar zxf apache-tomcat-8.0.32.tar.gz
で展開 -> root で/opt/apache-tomcat-8.0.32
に移動 - まずは普通にstartup.shを実行して動作確認
- root で
/opt/apache-tomcat-8.0.32/bin/startup.sh
実行 - 8080番ポートにアクセスしてTomcat8のデフォルトTOPページが表示されればOK.
systemd の unitファイル作成、登録
参考:
-
CentOS7 での Tomcat8 の自動起動設定
- http://qiita.com/Monota/items/3f715def67d53ba2f2a2
- 本記事はほぼこれのパクリです、大変助かりました、大感謝!
-
CentOS7 への Tomcat8 のインストール
- http://qiita.com/Monota/items/bb99fa5e1aa661182862
- firewalld でのサービス定義はこちらを参考。
-
参考メモ/CentOS7のApache Tomcatパッケージについてメモ
- http://qiita.com/msakamoto_sf/items/ef34922548275dd31014
- CentOS7のtocmatパッケージのunitファイルから、
SuccessExitStatus=143
だけコピーさせてもらったくらい・・・。
/etc/sysconfig/tomcat
を以下の内容で作成。systemdからの起動用で、/etc/profile
に頼らずに、unitファイルの EnvironmentFile
でJAVA_HOMEなど調整できるようします。(JAVA_OPTSについては参考記事の注参照) :
JAVA_HOME=/opt/jdk1.8.0_74
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"
unitファイルとして /etc/systemd/system/tomcat.service
を以下の内容で作成します。環境変数は EnvironmentFile
で調整できるようにして、CentOSのtomcatパッケージを参考に SuccessExitStatus=143
を指定。(参考にさせてもらった方ではKillMode=none
も入れてましたが、入れなくても正常にstart/stop/restartできました。)
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/opt/apache-tomcat-8.0.32/bin/startup.sh
ExecStop=/opt/apache-tomcat-8.0.32/bin/shutdown.sh
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
登録と動作確認:
# systemctl daemon-reload
# systemctl start tomcat.service
# systemctl status tomcat.service
● tomcat.service - Apache Tomcat Web Application Container
Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2016-03-13 20:55:57 JST; 1s ago
Process: 2720 ExecStart=/opt/apache-tomcat-8.0.32/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 2740 (java)
CGroup: /system.slice/tomcat.service
└─2740 /opt/jdk1.8.0_74/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-8.0.32/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.security.egd=file:/dev/./urandom -D...
Mar 13 20:55:56 localhost.localdomain systemd[1]: Starting Apache Tomcat Web Application Container...
Mar 13 20:55:57 localhost.localdomain startup.sh[2720]: Tomcat started.
Mar 13 20:55:57 localhost.localdomain systemd[1]: Started Apache Tomcat Web Application Container.
# systemctl enable tomcat.service
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /etc/systemd/system/tomcat.service.
→再起動後も正常にtomcat起動を確認。
停止:
# systemctl stop tomcat.service
この後、firewalldを使ってる場合はサービス定義のXMLを作成するなどして穴あけしますが、本記事では省略します。
感想
Javaのサービス管理ってやりづらそう、というイメージがあったんですが、CentOS提供のパッケージを調べたり、先人のノウハウのおかげで簡単にsystemdの流儀で管理できるようになりました。
お仕事でもこのノウハウ流用できれば良いなぁ・・・。