systemctl останавливает tomcat после запуска - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь настроить Tomcat 8.5.37 с systemctl для запуска сервера как демона в Ubuntu 16.04.

Для этого я создал следующий файл службы в /etc/systemd/system/tomcat8.service:

[Unit]
Description=Tomcat Server
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/opt/jdk1.8
Environment=CATALINA_PID=/opt/tomcat8/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat8
Environment=CATALINA_BASE=/opt/tomcat8
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -Dlog4j.configurationFile=/opt/conf/log4j2.xml'
Environment='JAVA_OPTS=-Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

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

User=tomcat
Group=tomcat
UMask=0007

#RestartSec=40
#Restart=always

[Install]
WantedBy=multi-user.target

Сервер Tomcat был загружен напрямую из apache и только распакован. JDK является последней версией Oracle JDK 1.8.

Когда я запускаю tomcat через startup.sh напрямую, все в порядке. Но когда я использую systemctl (daemon-reload был сделан раньше), он падает сразу.

Вывод состояния systemctl tomcat8:

● tomcat8.service - Tomcat Server
   Loaded: loaded (/etc/systemd/system/tomcat8.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Fri 2019-01-04 23:14:08 CET; 2s ago
  Process: 9793 ExecStop=/opt/tomcat8/bin/shutdown.sh (code=exited, status=0/SUCCESS)
  Process: 9781 ExecStart=/opt/tomcat8/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 9791 (code=exited, status=0/SUCCESS)

Выходные данные journalctl -xe:

Jan 04 23:14:04 myserver.com systemd[1]: Starting Tomcat Server...
-- Subject: Unit tomcat8.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit tomcat8.service has begun starting up.
Jan 04 23:14:04 myserver.com startup.sh[9781]: Tomcat started.
Jan 04 23:14:04 myserver.com systemd[1]: Started Tomcat Server.
-- Subject: Unit tomcat8.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit tomcat8.service has finished starting up.
--
-- The start-up result is done.
Jan 04 23:14:07 myserver.com shutdown.sh[9793]: Jan 04, 2019 11:14:06 PM org.apache.catalina.startup.Catalina stopServer
Jan 04 23:14:07 myserver.com shutdown.sh[9793]: SEVERE: Could not contact [localhost:[8005]]. Tomcat may not be running.
Jan 04 23:14:07 myserver.com shutdown.sh[9793]: Jan 04, 2019 11:14:07 PM org.apache.catalina.startup.Catalina stopServer
Jan 04 23:14:07 myserver.com shutdown.sh[9793]: SEVERE: Catalina.stop:
Jan 04 23:14:07 myserver.com shutdown.sh[9793]: java.net.ConnectException: Connection refused (Connection refused)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at java.net.PlainSocketImpl.socketConnect(Native Method)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at java.net.Socket.connect(Socket.java:589)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at java.net.Socket.connect(Socket.java:538)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at java.net.Socket.<init>(Socket.java:434)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at java.net.Socket.<init>(Socket.java:211)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:503)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at java.lang.reflect.Method.invoke(Method.java:498)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:406)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]:         at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:498)
Jan 04 23:14:07 myserver.com shutdown.sh[9793]: The stop command failed. Attempting to signal the process to stop through OS signal.

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

Что я вижу, так это то, что файлы журнала будут созданы, что подводит меня к выводу, что процесс запуска начался. Но меня смущают процессы на выходе состояния. Есть процесс для запуска и процесс для остановки.

Похоже, что startup.sh начинает работать, но код выхода неверен или не распознан, а systemd запускает команду ExecStop сразу после запуска startup.sh.

Другой сервер работает нормально с этой конфигурацией, но здесь у меня нет шансов запустить его до сих пор.

У кого-нибудь есть идеи, в чем проблема в этом случае?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 18 января 2019

У меня такая же проблема с 8.5.37 на Ubuntu 18.04.

Я сравнил catalina.sh между 8.5.35 и 8.5.37, и проблемное изменение кажется в строках 482 и 489 (если вы используете опцию -security, то это будет в строке 470 и 479), я изменил эти строки на строки из 8.5.35, и все началось без проблем.

Эти изменения связаны с добавлением параметра "$ CATALINA_OUT_CMD".

0 голосов
/ 08 февраля 2019

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

0 голосов
/ 09 января 2019

Эта проблема возникает только в последней версии 8.5.37. Попробуйте с 8.5.35 и все заработает.

По некоторым причинам, похоже, что новая версия catalina.sh, найденная в 8.5.37, имеет некоторые переменные управления, которые не нравятся Systemd.

...