tomcatをsystemdに登録する手順(CentOS8)
実現したいこと
- apache-tomcat公式のtar.gzをダウンロードしてCentOS8のsystemdに登録する。
systemctl restart tomcat
コマンドが正常に実行できるようにする。- プロセスの実行ユーザーはtomcat。
用意するもの、環境
- OS: CentOS8
- tomcat9.0
- Adopt OpenJDK 11 (LTS)
手順
1.tomcat実行用ユーザーを作成
以下のコマンドを実行してtomcatユーザーを新規作成する。
# useradd -s /sbin/nologin tomcat
2.tomcatを準備
公式サイトからダウンロードした apache-tomcat.tar.gz を適当な場所に設置する。
自分は/opt/tomcat
に設置してlatestリンクを作ってる。
# mkdir /opt/tomcat # cd /opt/tomcat # tar zxvf apache-tomcat-9.0.39.tar.gz # ln -s /opt/tomcat/apache-tomcat-9.0.39 latest
こういう配置にする。
# ll /opt/tomcat/ drwxr-xr-x. 9 tomcat tomcat apache-tomcat-9.0.39 lrwxrwxrwx. 1 tomcat tomcat latest -> apache-tomcat-9.0.39
3.JDKを配置
# mdir /opt/jdk # cd /opt/jdk # cp OpenJDK11U-jdk_x64_linux_hotspot_11.0.9_11.tar.gz /opt/jdk # tar zxvf OpenJDK11U-jdk_x64_linux_hotspot_11.0.9_11.tar.gz # ln -s jdk-11.0.9+11 latest
こういう配置にする。
# ll /opt/jdk/ drwxr-xr-x. 9 root root jdk-11.0.9+11 lrwxrwxrwx. 1 root root latest -> jdk-11.0.9+11
4.systemdのユニットファイルを作成
tomcatのユニットファイルを /usr/lib/systemd/system/tomcat.service
に新規作成する。
/usr/lib/systemd/system/tomcat.service
[Unit] Description=Apache Tomcat Servlet Container After=syslog.target network.target [Service] Type=oneshot User=tomcat Group=tomcat EnvironmentFile=/opt/tomcat/latest/bin/setenv.sh ExecStart=/opt/tomcat/latest/bin/startup.sh ExecStop=/opt/tomcat/latest/bin/shutdown_watching.sh RemainAfterExit=yes TimeoutSec=90 [Install] WantedBy=multi-user.target
ユニットファイルを反映。
# systemctl daemon-reload
5.tomcatの起動スクリプトを作成
プロセス終了を監視するシャットダウンスクリプトを新規作成する。
/opt/tomcat/latest/bin/shutdown_watching.sh
#!/bin/sh # const TOMCAT_HOME=/opt/tomcat/latest TOMCAT_USER=tomcat SHUTDOWN_WAIT=60 # function tomcat_pid() { echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'` } # shutdown.shでtomcatを停止する。 pid=$(tomcat_pid) if [ -n "$pid" ] then echo "Stoping Tomcat" /bin/sh $TOMCAT_HOME/bin/shutdown.sh # PIDが無くなるまで待機 let kwait=$SHUTDOWN_WAIT count=0; until [ `ps -p $pid | grep -c $pid` -eq '0' ] || [ $count -gt $kwait ] do echo -n -e "/nwaiting for processes to exit"; sleep 1 let count=$count+1; done if [ $count -gt $kwait ]; then echo -n -e "/nkilling processes which didn't stop after $SHUTDOWN_WAIT seconds" kill $pid fi else echo "Tomcat is not running" exit 0 # success fi exit 0 # success
6.tomcatのJava関連設定
tomcatはstartup.shと同じディレクトリにsetenv.shを設置すると起動時に読み込んでくれる。 以下を新規作成してJAVA_HOMEを設定する。JAVA_HOME以外は省略しても動くと思うが、一応設定してる。
/opt/tomcat/latest/bin/setenv.sh
#!/bin/sh JAVA_HOME="/opt/jdk/latest" CATALINA_HOME="/opt/tomcat/latest" CATALINA_BASE="/opt/tomcat/latest" CATALINA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=256M -Xmx2548m"
以上で準備完了。
動作確認
起動したりログを見たりプロセスを確認したりして正常に動作することを確認。
# systemctl start tomcat # systemctl status tomcat # ps -ef | grep tomcat # systemctl restart tomcat # systemctl stop tomcat # ps -ef | grep tomcat
以上。