(1) Tomcatのサービスが起動しない場合の想定原因と対処(Linux系OSの例)
(1-1) 発生状況・エラーメッセージ
(1-2) 原因
(1-3) 対処法
(1) Tomcatのサービスが起動しない場合の想定原因と対処(Linux系OSの例)
Tomcatのサービスを起動を行った際にエラーで起動できなかったケースにおいて、考えられる原因と対処方法について書いていきます。
(1-1) 発生状況・エラーメッセージ
■エラーメッセージ
Job for tomcat.service failed because the control process exited with error code. See "systemctl status tomcat.service" and "journalctl -xe" for details.
(図111)
(図112)
$ sudo systemctl start tomcat
(1-2) 原因
サービスが起動しない要因は1つではなく、様々考えられると思いますが、その中でも今回は「設定の不備」により起動しないケースに焦点を当てて、確認した方が良いと思われる点をご紹介します。
【確認ポイント】「ユニットファイル」内のパスの記述は正しいか?
CentOS7等の場合、Tomcat用に「tomcat.service」等の名前でユニットファイルを作成していると思いますが、その中で数か所パスを記述する箇所があると思います。
Environment=JAVA_HOME=/usr/lib/jvm/jre Environment=CATALINA_PID=[Tomcat Home Directory]/temp/tomcat.pid Environment=CATALINA_HOME=[Tomcat Home Directory] Environment=CATALINA_BASE=[Tomcat Home Directory] ExecStart=[Tomcat Home Directory]/bin/startup.sh
これらのパスのパスが誤っていると、正常に起動できない原因となります。
(1-3) 対処法
上記で述べたパスがあっているか?を確認していきます。
確認①:JAVA_HOME
Environment=JAVA_HOME=/usr/lib/jvm/jre
まずはJAVA_HOME(JREがインストールされているパス)ですが、これはJavaのバージョンによっていくつかの選択肢があるケースがあります(環境によって異なる場合あり)。
lrwxrwxrwx 1 root root 21 May 29 2020 jre -> /etc/alternatives/jre lrwxrwxrwx 1 root root 27 May 12 2020 jre-1.7.0 -> /etc/alternatives/jre_1.7.0 lrwxrwxrwx 1 root root 35 May 12 2020 jre-1.7.0-openjdk -> /etc/alternatives/jre_1.7.0_openjdk lrwxrwxrwx 1 root root 54 May 12 2020 jre-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64 -> java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/jre lrwxrwxrwx 1 root root 27 May 12 2020 jre-1.8.0 -> /etc/alternatives/jre_1.8.0 lrwxrwxrwx 1 root root 35 May 12 2020 jre-1.8.0-openjdk -> /etc/alternatives/jre_1.8.0_openjdk lrwxrwxrwx 1 root root 51 May 12 2020 jre-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64 -> java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre lrwxrwxrwx 1 root root 29 May 12 2020 jre-openjdk -> /etc/alternatives/jre_openjdk
(図131)
どれを指定すべきか?の判断は「ご自身のTomcatのインストールを、どの程度Javaのバージョンと密結合させるか?」によってくるもので、明確にどれを選ぶべきか?は一概に言えないものになります。
例えば、Java7を使うなら「jre-1.7.0」を指定し、Java8の中の更に細かいバージョンも指定したいなら「jre-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64」を選択する、といった具合です。
各選択肢の意味はおおよそ以下の通りです。
(表)
jre | ・多くの場合、アクティブなJavaのバージョンへのシンボリックリンクである事が多い ・実態は下記パスへのシンボリックリンクである(環境やバージョンにより異なる場合あり) /etc/alternatives/jre ・JREのみでJDKは含まれません。 ・実際に「jre-1.7.0」のリンク先ディレクトリとの差分を比較した結果、”jjs”という現在非推奨のJavaScriptのライブラリが含まれている点以外はおおよそ同じ印象でした。 |
jre-1.7.0 | ・Java7のJRE1.7.0を指定するシンボリックリンクです。 ・実態は下記パスへのシンボリックリンクである(環境やバージョンにより異なる場合あり) /etc/alternatives/jre_1.7.0 ・JREのみでJDKは含まれません。 |
jre-1.7.0-openjdk | ・Java7のJRE1.7.0を指定するシンボリックリンクです。 ・実態は下記パスへのシンボリックリンクである(環境やバージョンにより異なる場合あり) /etc/alternatives/jre_1.7.0_openjdk ・JREのみでJDKは含まれません(OpenJDKのうち、JRE部分のみを選択してインストールしています) |
jre-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64 | ・Java7のJRE1.7.0のうち、より細かいバージョンを指定するためのシンボリックリンクです。 ・実態は下記パスへのシンボリックリンクである(環境やバージョンにより異なる場合あり) java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/jre ・JREのみでJDKは含まれません(OpenJDKのうち、JRE部分のみを選択してインストールしています) |
確認②:Tomcat環境変数(CATALINA_XXX)や起動シェル
ユニットファイルで指定するTomcat環境変数(CATALINA_XXX)や起動シェルのパスには全て[Tomcat Home Directory]を指定していますが、これはインストール時(tarファイルの解凍時)に指定したパス(例では「/usr/local/src/」)の配下に作成される「apache-tomcat-8.X.XX」のフォルダの事です。
Environment=CATALINA_PID=[Tomcat Home Directory]/temp/tomcat.pid Environment=CATALINA_HOME=[Tomcat Home Directory] Environment=CATALINA_BASE=[Tomcat Home Directory] ExecStart=[Tomcat Home Directory]/bin/startup.sh
(図132)
私の場合は「/usr/local/src/apache-tomcat-8.5.61/」となっているので[Tomcat Home Directory]は全てこのパスに置き換えます。この中にTomcatの起動停止シェルやらconfigファイルなどが全て入っています。
Environment=CATALINA_PID=/usr/local/src/apache-tomcat-8.5.61/temp/tomcat.pid Environment=CATALINA_HOME=/usr/local/src/apache-tomcat-8.5.61 Environment=CATALINA_BASE=/usr/local/src/apache-tomcat-8.5.61 ExecStart=/usr/local/src/apache-tomcat-8.5.61/bin/startup.sh