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 localinstall
d'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?
sudo systemctl start tomcat.service
sont un tas d'erreurs d'autorisation refusée qui prennent des centaines de lignes.Réponses:
J'ai eu le même problème, résolu par:
donnant à l'utilisateur tomcat la propriété de l'ensemble du
tomcat
répertoire:et commentant la ligne ci-dessous dans /etc/systemd/system/tomcat.service:
la source
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étairePuisque 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.
la source
Selon les messages d'erreur, je pense que le problème vient de l'
ExecStop=/bin/kill -15 $MAINPID
endroit où la variable n'est pas remplacée. Selon la documentation de service$MAINPID
est attendue uniquement pour laExecReload
commande. La question demeure: pourquoiExecStop
est exécuté lorsque vous déclenchezstart
?Il est possible de
systemd
laisser 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_OPTS
etJAVA_OPTS
en/opt/tomcat/bin/setenv.sh
écriture et essayez d' abord avec une telle configuration simple:Dans tous les cas, veuillez rapporter
journalctl -xn
etlogs/catalina.out
contenula source