web-dev-qa-db-ja.com

systemctlは開始直後にTomcatサービスを停止します

StackOverflowで最初にこの質問をしましたが、このサイトの方が適しているようです。

Javaアプリを実行するようにWebアプリ環境を設定しています。環境は次のとおりです。

  • AWS EC2 Ubuntu 18
  • Java 8
  • Tomcat 9

EC2インスタンスを起動してJavaをインストールし、次にこのガイドに従ってTomcatをセットアップしました: https://www.digitalocean.com/community/tutorials/install-Tomcat-9-ubuntu-1804 =

systemctlがTomcatサービスを開始/再起動しようとすると、問題が発生します。 systemctlログをチェックアウトすると、次のようになります。

 Dec 19 13:35:25 ip-10-165-10-74 systemd [1]:Tomcat.service:サービスホールドオフタイムオーバー、スケジュールされた再起動。
 Dec 19 13:35 :25 ip-10-165-10-74 systemd [1]:Tomcat.service:スケジュールされた再起動ジョブ、再起動カウンターは5にあります。
 Dec 19 13:35:25 ip-10-165-10- 74 systemd [1]:Apache Tomcat Webアプリケーションコンテナーを停止しました。
 12月19日13:35:25 ip-10-165-10-74 systemd [1]:Apache Tomcat Webアプリケーションコンテナーを開始しています... 
 Dec 19 13:35:25 ip-10-165-10-74 startup.sh [1705]:Tomcatが起動しました。
 Dec 19 13:35:25 ip-10-165-10-74 systemd [1]:Apache Tomcat Webアプリケーションコンテナーを開始しました。
 12月19日13:35:26 ip-10-165-10-74 shutdown.sh [1725]:2018年12月19日1:35:26 = PM org.Apache.catalina.startup.Catalina stopServer 
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:重大:可能性あり[localhost:8005](ベースポート[8005]およびオフセット[0])に連絡しないでください。Tomcatが実行されていない可能性があります。
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:2018年12月19日1:35:26 PM org.Apache.catalina.startup.Catalina stopServer 
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:SEVERE:エラーの停止Catalina 
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:Java.net.ConnectException:Connection refused(Connection refused)
 Dec 19 13:35:26 ip-10-165 -10-74 shutdown.sh [1725]:at Java.net.PlainSocketImpl.socketConnect(Native Method)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725] :Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:350)
 12月13日13:35:26 ip-10-165-10-74 shutdown.sh [1725]:Java.net.AbstractPlainSocketImpl .connectToAddress(AbstractPlainSocketImpl.Java:206)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java: 188)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:392)
 12月19日13:35:26 ip-10-165-10-74シャットダウンdown.sh [1725]:at Java.net.Socket.connect(Socket.Java:589)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]: at Java.net.Socket.connect(Socket.Java:538)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:at Java.net.Socket。 (Socket.Java:434)
12月19日13:35:26 ip-10-165-10-74 shutdown.sh [1725]:at Java.net.Socket。(Socket.Java:211)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:at org.Apache.catalina.startup.Catalina.stopServer(Catalina.Java:513)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 Dec 19 13:35:26 ip- 10-165-10-74 shutdown.sh [1725]:at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:at Java.lang.reflect.Method.invoke(Method.Java:498)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:at org.Apache.catalina.startup.Bootstrap.stopServer(Bootstrap.Java:403)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:org.Apache .catalina.startup.Bootstrap.main(Bootstrap.Java:497)
 Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh [1725]:停止コマンドが失敗しました。 OSシグナルを介して停止するようにプロセスにシグナルを送信しようとしています。
 Dec 19 13:35:27 ip-10-165-10-74 shutdown.sh [1725]:Tomcatが停止しました。

Systemdの設定:

 [Unit] 
 Description = Apache Tomcat Web Application Container 
 After = network.target 
 
 [Service] 
Type = forking
 
 Environment = Java_HOME =/usr/lib/Java/jdk1.8.0_191 
 Environment = CATALINA_PID =/opt/Tomcat/temp/Tomcat.pid 
環境= CATALINA_HOME =/opt/Tomcat 
 Environment = CATALINA_BASE =/opt/Tomcat 
 Environment = 'CATALINA_OPTS = -Xms256M -Xmx512M -server -XX:+ UseParallelGC' 
 Environment = ' Java_OPTS = -Djava.awt.headless = true -Djava.security.egd = file:/ dev /./ urandom '
 
 ExecStart =/opt/Tomcat/bin/startup.sh 
 ExecStop =/opt/Tomcat/bin/shutdown.sh 
 
 User = Tomcat 
 Group = Tomcat 
 UMask = 0007 
 RestartSec = 10 
再起動=常に
 
 [インストール] 
 WantedBy = multi-user.target 

ここで問題を理解しているのは、Tomcatがシャットダウンコマンドをリッスンするために8005ポートに接続できないことです。

ただし、EC2 Security Groupコンソールでこのポートを開きました:8005 127.0.0.1/32

もう1つの奇妙なことは、ec2インスタンスを再起動するとTomcatは正常に起動しますが、上記のように例外をスローして再起動に失敗することです。

ここで何が問題になるのでしょうか?ポート8005が実際に開いていることを確認するにはどうすればよいですか?

===========

さて、私は少し進歩しましたが、Tomcatは正常に動作しているようです。 startup.shは問題なく動作します。ログに表示される場合があります-「Tomcatが開始しました」と表示されます。これはcatalina.sh startの最後の行です。ただし、systemctlがサービスを開始した直後にサービスを停止しようとする理由がわかりません。 catalina.sh stopコマンドを送信します。

2
yateam

良い記事をありがとう@MichaelHampton: https://jdebp.eu/FGA/systemd-house-of-horror/Tomcat.html

私が読んだチュートリアルで提案されている典型的なインストールで起こりうる問題(および他のコピー貼り付けされたもの)について説明しています。問題が発生する理由がわかりませんでした。多分それは、catalina.sh、startup.shなどによって導入されたすべてのレイヤーの問題です。

基本的に、私はsystemdの構成スクリプトを書き直し、それが機能し始めました。

3
yateam

私はまったく同じ問題を抱えていました。私だけがAmazon Lightsailを使っていました。たぶん、AmazonがUbuntuマシンを設定する方法、および説明されているTomcatサービスを作成する方法に問題があるのか​​もしれません。私は自分でセットアップしたローカルのUbuntuマシンで上記の方法を使用しましたが、問題なく動作しました。

私は@ michael-hamptonの記事を読み、そこで説明されているアプローチを使用しました。私はLinux初心者ですが、動作させるのにいくつかの問題があることに気付きました。私がここで作成したファイルを含めているので、この問題がある他のLinux初心者でも簡単に開始できます。私のTomcatのインストールは/ opt/Tomcatにあり、これらは最終的に次のファイルです。

/ etc/systemd/system/Tomcat.service

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target


[Service]
User=Tomcat
Group=Tomcat
UMask=0007

EnvironmentFile=/etc/default/Tomcat
ExecStart=/usr/bin/env ${Java_HOME}/bin/Java \
$Java_OPTS $CATALINA_OPTS \
-classpath ${CLASSPATH} \
-Dcatalina.base=${CATALINA_BASE} \
-Dcatalina.home=${CATALINA_HOME} \
-Djava.endorsed.dirs=${Java_ENDORSED_DIRS} \
-Djava.io.tmpdir=${CATALINA_TMPDIR} \
-Djava.util.logging.config.file=${CATALINA_BASE}/conf/logging.properties \
-Djava.util.logging.manager=org.Apache.juli.ClassLoaderLogManager \
org.Apache.catalina.startup.Bootstrap \
start

ExecStop=/usr/bin/env ${Java_HOME}/bin/Java \
$Java_OPTS $CATALINA_OPTS \
-classpath ${CLASSPATH} \
-Dcatalina.base=${CATALINA_BASE} \
-Dcatalina.home=${CATALINA_HOME} \
-Djava.endorsed.dirs=${Java_ENDORSED_DIRS} \
-Djava.io.tmpdir=${CATALINA_TMPDIR} \
-Djava.util.logging.config.file=${CATALINA_BASE}/conf/logging.properties \
-Djava.util.logging.manager=org.Apache.juli.ClassLoaderLogManager \
org.Apache.catalina.startup.Bootstrap \
stop

SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

/ etc/default/Tomcat

CATALINA_HOME=/opt/Tomcat
CATALINA_BASE=/opt/Tomcat
CATALINA_TMPDIR=/opt/Tomcat/temp
CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC
Java_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom
Java_ENDORSED_DIRS=/opt/Tomcat/endorsed
Java_HOME=/usr/lib/jvm/Java-1.8.0-openjdk-AMD64
CLASSPATH=/opt/Tomcat/bin/bootstrap.jar:/opt/Tomcat/bin/Tomcat-juli.jar
2
Jarle Jacobsen

これは、Tomcatの「最近の」バージョンで導入されたバグが原因であるように見えます。この回答を確認してください: https://stackoverflow.com/a/54452870/4735682 は、正しいバグレポートを示しているためです。

Tomcatの最新バージョンにはこのバグはありません。したがって、アップデートすると、systemdユニットファイルをいじる必要なく、問題が解決されます。

0