tomcat 8 ne démarre pas après l'installation initiale

18

J'essaie d'installer tomcat sur une nouvelle machine virtuelle CentOS 7. J'ai installé avec succès apache httpd et je peux obtenir la page de test d'apache lorsque je tape l'ip de la machine virtuelle dans un navigateur Web sur un autre ordinateur du réseau. Mais je reçois le message d'erreur suivant lorsque je tape systemctl start tomcat:

Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.  

Voici l'historique complet des commandes dans l'installation de java et tomcat:

J'ai d'abord commencé par installer java en utilisant les instructions de ce tutoriel car les instructions tomcat (deuxième bloc ci-dessous) voulaient que j'utilise openjdk, et j'ai besoin d'utiliser du vrai java:

//Install Java
# cd /opt/
# yum install wget
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.tar.gz"

# tar xzf jdk-8u60-linux-x64.tar.gz

# cd /opt/jdk1.8.0_60/
# alternatives --install /usr/bin/java java /opt/jdk1.8.0_60/bin/java 2
# alternatives --config java
(Select the version you want)
# alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_60/bin/jar 2
# alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_60/bin/javac 2
# alternatives --set jar /opt/jdk1.8.0_60/bin/jar
# alternatives --set javac /opt/jdk1.8.0_60/bin/javac
# java -version (checks to see you install correct version)
# export JAVA_HOME=/opt/jdk1.8.0_60
# export JRE_HOME=/opt/jdk1.8.0_60/jre
# export PATH=$PATH:/opt/jdk1.8.0_60/bin:/opt/jdk1.8.0_60/jre/bin

Notez que le tutoriel précédent n'explique pas comment mettre les variables d'environnement /etc/environment, donc je me suis arrêté avant cette commande.

Les commandes suivantes proviennent de cet autre didacticiel . J'ai commencé au point après avoir installé java:

//Install Tomcat
Login as sudo user, not root.
# sudo groupadd tomcat
# sudo useradd -M -s /bin/nologin -g tomcat -d /opt/tomcat tomcat
# cd ~
# wget http://mirrors.gigenet.com/apache/tomcat/tomcat-8/v8.0.27/bin/apache-tomcat-8.0.27.tar.gz
# sudo mkdir /opt/tomcat
# sudo tar xvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1
# cd /opt/tomcat
# sudo chgrp -R tomcat conf
# sudo chmod g+rwx conf
# sudo chmod g+r conf/*
# sudo chown -R tomcat work/ temp/ logs/
# sudo vi /etc/systemd/system/tomcat.service
Cut and paste the following file contents:
##################################################
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID

User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
##################################################
# sudo systemctl daemon-reload

# sudo systemctl start tomcat
Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.
# sudo systemctl start tomcat.service

Le travail pour tomcat.service a échoué. Voir «systemctl status tomcat.service» et «journalctl -xn» pour plus de détails. # sudo systemctl enable tomcat.service ln -s '/etc/systemd/system/tomcat.service' '/etc/systemd/system/multi-user.target.wants/tomcat.service' # sudo systemctl enable tomcat

# sudo systemctl status tomcat.service
tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled)
   Active: failed (Result: exit-code) since Tue 2015-10-13 11:05:31 PDT; 47s ago

Oct 13 11:05:31 localhost.localdomain kill[20887]: -q, --queue <sig>      use sigqueue(2) rather than kill(2)
Oct 13 11:05:31 localhost.localdomain kill[20887]: -p, --pid              print pids without signaling them
Oct 13 11:05:31 localhost.localdomain kill[20887]: -l, --list [=<signal>] list signal names, or convert one to a name
Oct 13 11:05:31 localhost.localdomain kill[20887]: -L, --table            list signal names and numbers
Oct 13 11:05:31 localhost.localdomain kill[20887]: -h, --help     display this help and exit
Oct 13 11:05:31 localhost.localdomain kill[20887]: -V, --version  output version information and exit
Oct 13 11:05:31 localhost.localdomain kill[20887]: For more details see kill(1).
Oct 13 11:05:31 localhost.localdomain systemd[1]: tomcat.service: control process exited, code=exited status=1
Oct 13 11:05:31 localhost.localdomain systemd[1]: Failed to start Apache Tomcat Web Application Container.
Oct 13 11:05:31 localhost.localdomain systemd[1]: Unit tomcat.service entered failed state.

Faire un yum localinstalld'un rpm jdk mis à jour, comme suggéré dans cette autre publication , n'a pas fonctionné.


MODIFICATIONS:


Selon la suggestion de @ Bram, j'ai changé le fichier de configuration comme suit, mais j'obtiens toujours la même erreur:

# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/opt/jdk1.8.0_60
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID

User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

De plus, selon le commentaire de @ JeffSchaller dans le chat, j'ai pu faire démarrer nativement tomcat comme suit:

[user@localhost tomcat]$ sudo /opt/tomcat/bin/startup.sh
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Tomcat started.
[user@localhost tomcat]$

Ainsi, le problème dans cet OP semble être lié à la configuration systemd. Comment puis-je le réparer?

CodeMed
la source
Des erreurs dans le fichier journal tomcat? Si je me souviens bien, le fichier s'appelle catalina.out ou quelque chose comme ça.
Bram
Les journaux de Tomcat après sudo systemctl start tomcat.servicesont un tas d'erreurs d'autorisation refusée qui prennent des centaines de lignes.
CodeMed

Réponses:

16

J'ai eu le même problème, résolu par:

  1. donnant à l'utilisateur tomcat la propriété de l'ensemble du tomcatrépertoire:

    cd /opt && sudo chown -R tomcat tomcat/
    
  2. et commentant la ligne ci-dessous dans /etc/systemd/system/tomcat.service:

    Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
    
user2968675
la source
1
Est-il sûr de faire de Tomcat le propriétaire de l'intégralité du dossier? Je pensais que nous voulions restreindre l'accès autant que possible?
user3203425
Je n'ai pas cette configuration à tester maintenant, mais je pense que le problème était dans: "sudo chown -R tomcat work / temp / logs /". Je dirais qu'il faut au moins la propriété de "bin /".
user2968675
L'étape 1 seule l'a fait pour moi, semble-t-il. Que fait exactement la ligne de l'étape 2?
Kimberly W
Vous avez raison, l'étape 1 suffit pour résoudre ce problème particulier. L'étape 2 définit la taille du segment de mémoire Java et le type de récupération de place. J'en avais besoin à cause de mes propriétés environnementales, mais la plupart des gens ne le feront probablement pas.
user2968675
dans mon cas ne cd /opt && sudo chown -R tomcat tomcat/fonctionnait que. Parce que j'ai changé le propriétaire en utilisateur système et oublié de faire de Tomcat le propriétaire
imdzeeshan
2

Puisque vous avez installé Java dans un emplacement non défini, vous devez indiquer à tomcat où le trouver.

Dans le fichier d'unité que vous avez publié, JAVA_HOME est défini sur / usr / lib / jvm / jre mais dans la section relative à l'installation de Java, JAVA_HOME est /opt/jdk1.8.0_60.

Si vous définissez JAVA_HOME dans le fichier d'unité tomcat systemd, je pense que cela fonctionnera.

Le fichier d'unité spécifie également l'utilisateur tomcat. Mais lorsque vous le démarrez manuellement, vous le démarrez en tant que root. Le problème est probable que tomcat tente d'ouvrir un port privilégié. Le script de démarrage démarre-t-il en tant que root? Ou démarre-t-il des processus en tant qu'utilisateur tomcat? La suppression de l'utilisateur et du groupe du fichier d'unité devrait déclencher le même comportement que votre tentative de ligne de commande.

Bram
la source
Comment corriger l'erreur suivante: Le travail pour tomcat8.service a échoué car le processus de contrôle s'est terminé avec un code d'erreur. Voir "systemctl status tomcat8.service" et "journalctl -xe" pour plus de détails. invoke-rc.d: initscript tomcat8, l'action "start" a échoué. -> sudo nano / etc / default / tomcat8 -> Définir JAVA_HOME JAVA_HOME = / usr / lib / jvm / java-8-oracle -> gist.github.com/alexislucena/89a046dc747123faf4496fb946c1fe79
Combiner
1

Selon les messages d'erreur, je pense que le problème vient de l' ExecStop=/bin/kill -15 $MAINPIDendroit où la variable n'est pas remplacée. Selon la documentation de service $MAINPIDest attendue uniquement pour la ExecReloadcommande. La question demeure: pourquoi ExecStopest exécuté lorsque vous déclenchez start?

Il est possible de systemdlaisser le répertoire de travail du processus JVM tel /qu'il peut ne pas être pertinent pour les applications déployées.

Je vous propose de déplacer CATALINA_OPTSet JAVA_OPTSen /opt/tomcat/bin/setenv.shécriture et essayez d' abord avec une telle configuration simple:

[Unit]
Description=Apache Tomcat
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/java/default
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat

WorkingDirectory=/opt/tomcat

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

User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

Dans tous les cas, veuillez rapporter journalctl -xnet logs/catalina.outcontenu

Yves Martin
la source