1
votes

systemctl arrête Tomcat après le démarrage

J'essaye de configurer Tomcat 8.5.37 avec systemctl pour démarrer le serveur en tant que démon sur Ubuntu 16.04.

Pour cela, j'ai créé le fichier de service suivant dans /etc/systemd/system/tomcat8.service:

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.

Le serveur Tomcat a été téléchargé directement depuis apache et uniquement extrait. JDK est le dernier Oracle JDK 1.8.

Quand je lance le tomcat directement via startup.sh, tout va bien. Mais quand j'utilise systemctl (daemon-reload a été effectué auparavant), il plante directement.

Sortie de l'état de 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)

Sortie de journalctl -xe:

[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

L'exception n'est pas le problème, car elle tente d'arrêter un service, qui n'existe plus.

Ce que je peux voir, c'est , que les fichiers journaux seront créés, ce qui m'amène au fait que le processus de démarrage a commencé. Mais je suis confus par les processus à la sortie d'état. Il existe un processus de démarrage et un processus d'arrêt.

Il semble que startup.sh démarre, mais le code de sortie est erroné ou n'est pas reconnu et systemd exécute la commande ExecStop directement après startup.sh a été exécuté.

Un autre serveur fonctionne bien avec cette configuration, mais ici je n'ai aucune chance de le faire fonctionner jusqu'à présent.

Quelqu'un a-t-il une idée du problème dans ce cas?

Merci!


3 commentaires

As-tu trouvé la solution? Je suis confronté exactement au même problème ...


Non, il ne fonctionne toujours pas. Actuellement, j'exécute le tomcat via sudo -u tomcat /opt/tomcat8/bin/startup.sh pour le démarrer en tant qu'utilisateur tomcat et j'ai un cronjob qui vérifie le site, s'il fonctionne. Sinon, il exécute ce script. Mais ce n'est qu'une solution de contournement. J'ai encore besoin d'une solution pour cela; (.


Cela est dû à un bug dans le script catalina.sh. Voir bz.apache.org/bugzilla/show_bug.cgi?id=63063 et bz.apache.org/bugzilla/show_bug.cgi?id=63041


3 Réponses :


0
votes

Ce problème se produit uniquement avec la dernière version 8.5.37. Essayez avec 8.5.35 et cela fonctionnera.

Pour une raison quelconque, il semble que la nouvelle version de catalina.sh trouvée dans 8.5.37 dispose d'une gestion de variables que Systemd n'aime pas.


0 commentaires

0
votes

J'ai le même problème avec 8.5.37 sur ubuntu 18.04.

J'ai comparé le catalina.sh entre le 8.5.35 et le 8.5.37 et le changement problématique semble être sur les lignes 482 et 489 (si vous utilisez l'option -security, il sera en ligne 470 et 479), j'ai changé ces lignes avec celles du 8.5.35 et ça a commencé sans problème.

Ces modifications sont liées à l'ajout de l'option "$ CATALINA_OUT_CMD".


0 commentaires

1
votes

La bonne réponse ici serait "mettre à jour Tomcat", car cela est causé par un bogue dans le script de démarrage, comme expliqué dans https : //stackoverflow.com/a/54452870/4735682


0 commentaires