Сначала я задал этот вопрос на 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.