Estoy tratando de instalar Tomcat en una nueva máquina virtual CentOS 7. Instalé con éxito Apache httpd, y puedo obtener la página de prueba de Apache cuando escribo la dirección IP de la máquina virtual en un navegador web en otra computadora en la red. Pero recibo el siguiente mensaje de error cuando escribo systemctl start tomcat
:
Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.
Aquí está el historial completo de comandos en la instalación de java y tomcat:
Primero comencé instalando Java usando las instrucciones de este tutorial porque las instrucciones de Tomcat (segundo bloque a continuación) querían que usara OpenJDK, y necesito usar Java real:
//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
Tenga en cuenta que el tutorial anterior no explica cómo colocar las variables de entorno /etc/environment
, por lo que me detuve antes de ese comando.
Los siguientes comandos son de este otro tutorial . Comencé en el punto después de instalar 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
El trabajo para tomcat.service falló. Consulte 'systemctl status tomcat.service' y 'journalctl -xn' para más detalles. # 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.
Hacer una yum localinstall
actualización de jdk rpm, como se sugiere en esta otra publicación , no funcionó.
EDICIONES:
Según la sugerencia de @ Bram, cambié el archivo de configuración a lo siguiente, pero sigo recibiendo el mismo error:
# 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
Además, según el comentario de @ JeffSchaller en el chat, pude hacer que tomcat se iniciara de forma nativa de la siguiente manera:
[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]$
Así, el problema en este PO parece estar relacionado con la configuración systemd. ¿Cómo puedo arreglarlo?
sudo systemctl start tomcat.service
un montón de errores de permiso denegado que tienen cientos de líneas.Respuestas:
Tuve el mismo problema, lo solucioné por:
Tomcat dar la propiedad de usuario de todo el
tomcat
directorio:y comentando debajo de la línea en /etc/systemd/system/tomcat.service:
fuente
cd /opt && sudo chown -R tomcat tomcat/
funcionó. Porque cambié el propietario a usuario del sistema y olvidé volver a tomar Tomcat como propietarioDado que instaló Java en una ubicación no deshabilitada, debe decirle a tomcat dónde encontrarlo.
En el archivo de la unidad informados JAVA_HOME se establece en / usr / lib / jvm / jre pero en la sección acerca de la instalación de Java JAVA_HOME es /opt/jdk1.8.0_60.
Si configura JAVA_HOME en el archivo de unidad systemcat de tomcat, creo que funcionará.
También el archivo unidad especifica Tomcat usuario. Pero cuando se inicia manualmente se inicia como root. El problema es probable que los intentos Tomcat para abrir un puerto privilegiado. ¿Se inicia la secuencia de comandos de inicio de Tomcat como root? ¿O se inicia procesos Tomcat como usuario? Eliminar el usuario y el grupo del archivo de la unidad debería desencadenar el mismo comportamiento de su intento de línea de comando.
fuente
Según los mensajes de error, creo que el problema proviene de
ExecStop=/bin/kill -15 $MAINPID
donde la variable no se reemplaza. De acuerdo con la documentación del servicio$MAINPID
se espera solo para elExecReload
comando. La pregunta sigue siendo: ¿por quéExecStop
se ejecuta cuando se activastart
?Es posible
systemd
directorio de trabajo hojas proceso de JVM como/
que no pueda ser pertinente para las aplicaciones implementadas.Propongo que se mueve
CATALINA_OPTS
yJAVA_OPTS
en/opt/tomcat/bin/setenv.sh
guión y pruebe primero con una configuración tan sencilla:En cualquier caso, por favor informe
journalctl -xn
ylogs/catalina.out
contenidofuente