Hi All, I seem to be having troubles getting Tomcat 8.5 to start on an Amazon Linux 2 server with systemctl. The problem seems to be that after starting tomcat, it always immediately tries to shut down. From /var/log:
Jan 22 23:13:32 cloud systemd: Starting Tomcat 8.5 servlet container... Jan 22 23:13:32 cloud startup.sh: Tomcat started. Jan 22 23:13:32 cloud systemd: Started Tomcat 8.5 servlet container. Jan 22 23:13:33 cloud shutdown.sh: Jan 22, 2019 11:13:33 PM org.apache.catalina.startup.Catalina stopServer Jan 22 23:13:33 cloud shutdown.sh: SEVERE: Could not contact [localhost:[8005]]. Tomcat may not be running. Jan 22 23:13:33 cloud shutdown.sh: Jan 22, 2019 11:13:33 PM org.apache.catalina.startup.Catalina stopServer Jan 22 23:13:33 cloud shutdown.sh: SEVERE: Catalina.stop: Jan 22 23:13:33 cloud shutdown.sh: java.net.ConnectException: Connection refused (Connection refused) Jan 22 23:13:33 cloud shutdown.sh: at java.net.PlainSocketImpl.socketConnect(Native Method) Jan 22 23:13:33 cloud shutdown.sh: at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) Jan 22 23:13:33 cloud shutdown.sh: at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) Jan 22 23:13:33 cloud shutdown.sh: at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) Jan 22 23:13:33 cloud shutdown.sh: at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) Jan 22 23:13:33 cloud shutdown.sh: at java.net.Socket.connect(Socket.java:589) Jan 22 23:13:33 cloud shutdown.sh: at java.net.Socket.connect(Socket.java:538) Jan 22 23:13:33 cloud shutdown.sh: at java.net.Socket.<init>(Socket.java:434) Jan 22 23:13:33 cloud shutdown.sh: at java.net.Socket.<init>(Socket.java:211) Jan 22 23:13:33 cloud shutdown.sh: at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:503) Jan 22 23:13:33 cloud shutdown.sh: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) Jan 22 23:13:33 cloud shutdown.sh: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) Jan 22 23:13:33 cloud shutdown.sh: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) Jan 22 23:13:33 cloud shutdown.sh: at java.lang.reflect.Method.invoke(Method.java:498) Jan 22 23:13:33 cloud shutdown.sh: at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:406) Jan 22 23:13:33 cloud shutdown.sh: at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:498) Jan 22 23:13:33 cloud shutdown.sh: The stop command failed. Attempting to signal the process to stop through OS signal. Jan 22 23:13:34 cloud shutdown.sh: Tomcat stopped. However, I can manually start tomcat on the same server, which works fine, e.g.: # cd /opt/tomcat/bin # ./catalina.sh start Using CATALINA_BASE: /opt/tomcat Using CATALINA_HOME: /opt/tomcat Using CATALINA_TMPDIR: /opt/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar Tomcat started. # ps -aef | grep java root 8598 1 50 23:17 pts/0 00:00:02 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start And it stays running until I explicitly shut it down. However, what is most odd is that I also have tomcat 8.5 running on a DIFFERENT system, which was built with a generic CentOS 7.5 download (vs. an Amazon Linux 2 EC2 server), but USING THE SAME SERVICE FILE. I was under the impression that the Amazon Linux 2 is based on CentOS 7. Or, at least I can’t find the difference. And while Google’ing around, I did find other mentions of the exact same problem, whereby tomcat tries to immediately shut down after starting up, but alas without a posted solution. I was wondering if anyone out there might have come across this problem, and have any advice? Also, the one difference was that on CentOS 7 — which works — I am using Oracle Java 8 java installed on /opt/java, and on AWS — which does not work — I was using OpenJDK 8. However, I have also tried installing the same Oracle Java 8 on Amazon Linux 2 in /opt/java, and then changing: Environment="JAVA_HOME=/opt/java“ and have the exact same problem. So I am running out of things to try! Actually, one other minor difference is that the CentOS 7.5 server has tomcat 8.5.34 and the AWS server has tomcat 8.5.37, and I am assuming that the difference in patch level is not relevant, but am mentioning it nonetheless. Finally, nothing else is currently running on port 8080, e.g.: # telnet localhost 8080 Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused The only thing I see written to /opt.tomcat/logs/catalina.out is: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=256m; support was removed in 8.0 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=384m; support was removed in 8.0 Which tells me that it is finding the JVM, but that I have to remove the PermGen parameters (but I am leaving in as an indication that the JVM is being run, but that the warning should not be causing my problem because it is ignoring the obsolete parameters). I am documenting first what works (CentOS 7.5), followed by what doesn’t work (AWS). If anyone has any ideas, or can spot the difference, or has any ideas on what else I can check, please let me know. Thanks, Dave Filip dfi...@colornet.com +1-212-338-0535 ========================================================== CentOS 7.5 with Tomcat 8.5.34 (WORKS) # /opt/java/bin/java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode) /usr/lib/systemd/system/tomcat.service: [Unit] Description=Tomcat 8.5 servlet container After=network.target [Service] Type=forking User=tomcat Group=www Environment="JAVA_HOME=/opt/java" #Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom" Environment="CATALINA_BASE=/opt/tomcat" Environment="CATALINA_HOME=/opt/tomcat" Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid" Environment="CATALINA_OPTS=-Xms512m -Xmx640m -XX:PermSize=256m -XX:MaxPermSize=384m" ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh [Install] WantedBy=multi-user.target [root@proteus system]# pwd /usr/lib/systemd/system ========================================================== Amazon Linux 2 with Tomcat 8.5.37 (FAILS) # /usr/lib/jvm/jre/bin/java -version openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode) /usr/lib/systemd/system/tomcat85.service: [Unit] Description=Tomcat 8.5 servlet container After=network.target [Service] Type=forking User=tomcat Group=www Environment="JAVA_HOME=/usr/lib/jvm/jre" #Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom" Environment="CATALINA_BASE=/opt/tomcat" Environment="CATALINA_HOME=/opt/tomcat" Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid" Environment="CATALINA_OPTS=-Xms512m -Xmx640m -XX:PermSize=256m -XX:MaxPermSize=384m" ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh #SuccessExitStatus=143 [Install] WantedBy=multi-user.target # systemctl start tomcat85 # systemctl status tomcat85 ● tomcat85.service - Tomcat 8.5 servlet container Loaded: loaded (/usr/lib/systemd/system/tomcat85.service; disabled; vendor preset: disabled) Active: inactive (dead) Jan 22 22:33:03 cloud.colornet.com shutdown.sh[8245]: at java.net.Socket.<init>(Socket.java:434) Jan 22 22:33:03 cloud.colornet.com shutdown.sh[8245]: at java.net.Socket.<init>(Socket.java:211) Jan 22 22:33:03 cloud.colornet.com shutdown.sh[8245]: at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:503) Jan 22 22:33:03 cloud.colornet.com shutdown.sh[8245]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) Jan 22 22:33:03 cloud.colornet.com shutdown.sh[8245]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) Jan 22 22:33:03 cloud.colornet.com shutdown.sh[8245]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) Jan 22 22:33:03 cloud.colornet.com shutdown.sh[8245]: at java.lang.reflect.Method.invoke(Method.java:498) Jan 22 22:33:03 cloud.colornet.com shutdown.sh[8245]: at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:406) Jan 22 22:33:03 cloud.colornet.com shutdown.sh[8245]: at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:498) Jan 22 22:33:03 cloud.colornet.com shutdown.sh[8245]: The stop command failed. Attempting to signal the process to stop through OS signal. # grep tomcat /etc/passwd tomcat:x:301:300:Tomcat:/opt/tomcat:/bin/bash # grep www /etc/group www:x:300: ==========================================================