systemctl 启动后立即停止 Tomcat 服务

yat*_*eam 6 linux ubuntu tomcat amazon-web-services systemctl

我首先在 StackOverflow 上问了这个问题,但似乎这个网站更合适。

我正在设置一个 Web 应用程序环境来运行 Java 应用程序。环境应该是:

  • AWS EC2 Ubuntu 18
  • 爪哇8
  • 雄猫9

我启动了 EC2 实例并安装了 java,然后按照本指南设置 Tomcat: https: //www.digitalocean.com/community/tutorials/install-tomcat-9-ubuntu-1804

systemctl现在,当尝试启动/重新启动 Tomcat 服务时,问题就会出现。这是我在检查 systemctl 日志时看到的内容:

12 月 19 日 13:35:25 ip-10-165-10-74 systemd[1]: tomcat.service: 服务延迟时间结束,计划重新启动。
12 月 19 日 13:35:25 ip-10-165-10-74 systemd[1]: tomcat.service: 计划重启作业,重启计数器为 5。
12 月 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 应用程序容器...
12 月 19 日 13:35:25 ip-10-165-10-74startup.sh[1705]:Tomcat 已启动。
12 月 19 日 13:35:25 ip-10-165-10-74 systemd[1]:启动 Apache Tomcat Web 应用程序容器。
十二月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: 十二月 19, 2018 1:35:26 PM org.apache.catalina.startup.Catalina stopServer
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:严重:无法联系 [localhost:8005](基本端口 [8005] 和偏移量 [0])。Tomcat 可能未运行。
十二月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: 十二月 19, 2018 1:35:26 PM org.apache.catalina.startup.Catalina stopServer
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:严重:停止 Catalina 时出错
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: java.net.ConnectException: 连接被拒绝(连接被拒绝)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:位于 java.net.PlainSocketImpl.socketConnect(本机方法)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:位于 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:位于 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: 在 java.net.Socket.connect(Socket.java:589)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: 在 java.net.Socket.connect(Socket.java:538)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: 在 java.net.Socket.(Socket.java:434)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: 在 java.net.Socket.(Socket.java:211)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:位于 org.apache.catalina.startup.Catalina.stopServer(Catalina.java:513)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:位于 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: 在 java.lang.reflect.Method.invoke(Method.java:498)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:位于 org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:403)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:位于 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:497)
12 月 19 日 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:停止命令失败。尝试通过操作系统信号通知进程停止。
12 月 19 日 13:35:27 ip-10-165-10-74 shutdown.sh[1725]:Tomcat 已停止。

系统配置:

[单元]
描述=Apache Tomcat Web 应用程序容器
之后=网络.目标

[服务]
类型=分叉

环境=JAVA_HOME=/usr/lib/java/jdk1.8.0_191
环境=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
环境=CATALINA_HOME=/opt/tomcat
环境=CATALINA_BASE=/opt/tomcat
环境='CATALINA_OPTS=-Xms256M -Xmx512M -server -XX:+UseParallelGC'
环境='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=文件:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

用户=tomcat
组=tomcat
U掩码=0007
重新启动秒=10
重新启动=始终

[安装]
WantedBy=多用户.target

据我了解,这里的问题是 Tomcat 无法连接到 8005 端口以侦听关闭命令。

但是,我在 EC2 安全组控制台中打开了此端口: 8005 127.0.0.1/32

另一个奇怪的事情是,重新启动 ec2 实例时 Tomcat 启动正常,但无法重新启动并抛出上述异常。

这里可能有什么问题?如何检查端口 8005 是否确实打开?

===========

好吧,我取得了一些进展,我发现 Tomcat 似乎工作得很好。startup.sh工作正常 - 您可能会在日志中看到这一点 - 它回显“Tomcat 已启动”。这是 中的最后一行catalina.sh start。但是,我不明白为什么systemctl在服务启动后立即尝试停止它。它发送catalina.sh stop命令。

yat*_*eam 4

感谢@MichaelHampton 的好文章: https://jdebp.eu/FGA/systemd-house-of-horror/tomcat.html

它解释了我阅读的教程(以及大量其他复制粘贴的教程)中建议的典型安装可能出现的问题。我不明白为什么会出现这个问题。也许这是catalina.sh、startup.sh等引入的所有层的问题。

所以基本上,我重写了 systemd 配置脚本,它开始工作。