Назад | Перейти на главную страницу

systemctl останавливает службу Tomcat сразу после запуска

Сначала я задал этот вопрос на StackOverflow, но мне кажется, что этот сайт мне больше подходит.

Я настраиваю среду веб-приложений для запуска приложений Java. Среда должна быть:

Я запустил экземпляр 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: Service hold-off time over, scheduling restart.
Dec 19 13:35:25 ip-10-165-10-74 systemd[1]: tomcat.service: Scheduled restart job, restart counter is at 5.
Dec 19 13:35:25 ip-10-165-10-74 systemd[1]: Stopped Apache Tomcat Web Application Container.
Dec 19 13:35:25 ip-10-165-10-74 systemd[1]: Starting Apache Tomcat Web Application Container...
Dec 19 13:35:25 ip-10-165-10-74 startup.sh[1705]: Tomcat started.
Dec 19 13:35:25 ip-10-165-10-74 systemd[1]: Started Apache Tomcat Web Application Container.
Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: Dec 19, 2018 1:35:26 PM org.apache.catalina.startup.Catalina stopServer
Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: SEVERE: Could not contact [localhost:8005] (base port [8005] and offset [0]). Tomcat may not be running.
Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: Dec 19, 2018 1:35:26 PM org.apache.catalina.startup.Catalina stopServer
Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: SEVERE: Error stopping 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]:         at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh[1725]:         at 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)
Dec 19 13:35:26 ip-10-165-10-74 shutdown.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)
Dec 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]:         at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:497)
Dec 19 13:35:26 ip-10-165-10-74 shutdown.sh[1725]: The stop command failed. Attempting to signal the process to stop through OS signal.
Dec 19 13:35:27 ip-10-165-10-74 shutdown.sh[1725]: Tomcat stopped.

Конфигурация systemd:

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

[Service]
Тип = разветвление

Environment=JAVA_HOME=/usr/lib/java/jdk1.8.0_191
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=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
Restart=always

[Install]
WantedBy=multi-user.target

Насколько я понимаю, проблема здесь в том, что Tomcat не может подключиться к порту 8005, чтобы прослушивать команды выключения.

Однако я открыл этот порт в консоли EC2 Security Group: 8005 127.0.0.1/32

Другая странная вещь заключается в том, что Tomcat запускается нормально при перезагрузке экземпляра ec2, но не может перезапустить исключение, как указано выше.

В чем тут может быть проблема? Как проверить, действительно ли открыт порт 8005?

===========

Хорошо, я добился некоторого прогресса, я понял, что Tomcat, похоже, работает нормально. startup.sh работает нормально - вы можете увидеть это в журнале - он перекликается с "Tomcat запущен". Это последняя строка в catalina.sh start. Однако я не понимаю, почему systemctl пытается остановить службу сразу после ее запуска. Он отправляет catalina.sh stop команда.

Спасибо @MichaelHampton за хорошую статью: https://jdebp.eu/FGA/systemd-house-of-horror/tomcat.html

Он объясняет возможные проблемы с типичной установкой, предложенной в прочитанном мной учебнике (и множестве других скопированных). Я не мог понять, почему возникает проблема. Возможно, это проблема всех слоев, представленных catalina.sh, startup.sh и т. Д.

По сути, я переписал сценарий конфигурации systemd, и он начал работать.

У меня была точно такая же проблема. Только я использовал 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

/ и т. д. / по умолчанию / кот

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

похоже, это связано с ошибкой, появившейся в «последних» версиях Tomcat. Пожалуйста, проверьте этот ответ: https://stackoverflow.com/a/54452870/4735682, поскольку он указывает на правильные сообщения об ошибках.

Последние версии Tomcat не содержат этой ошибки, поэтому обновление должно исправить вашу проблему без необходимости возиться с файлом модуля systemd.