Ich versuche, Tomcat auf einer neuen virtuellen CentOS 7-Maschine zu installieren. Ich habe Apache httpd erfolgreich installiert und kann die Apache-Testseite abrufen, wenn ich die IP-Adresse der virtuellen Maschine in einen Webbrowser auf einem anderen Computer im Netzwerk eingebe. Bei der Eingabe wird jedoch die folgende Fehlermeldung angezeigt systemctl start tomcat
:
Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.
Hier ist der vollständige Verlauf der Befehle in der Installation von Java und Tomcat:
Zuerst habe ich Java mit den Anweisungen aus diesem Tutorial installiert, da ich in den Tomcat-Anweisungen (zweiter Block unten) openjdk verwenden wollte und echtes Java verwenden muss:
//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
Beachten Sie, dass im vorherigen Lernprogramm nicht erklärt wird, wie Umgebungsvariablen eingefügt werden /etc/environment
, sodass ich vor diesem Befehl angehalten habe.
Die folgenden Befehle stammen aus diesem anderen Lernprogramm . Ich habe an dem Punkt angefangen, nachdem ich Java installiert habe:
//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
Job für tomcat.service fehlgeschlagen. Weitere Informationen finden Sie unter 'systemctl status tomcat.service' und 'journalctl -xn'. # 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.
Das yum localinstall
Ausführen einer aktualisierten JDK-Drehzahl, wie in diesem anderen Beitrag vorgeschlagen , funktionierte nicht.
EDITS:
Gemäß @ Brams Vorschlag habe ich die Konfigurationsdatei wie folgt geändert, erhalte aber immer noch den gleichen Fehler:
# 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
Außerdem konnte ich laut @ JeffSchallers Kommentar im Chat Tomcat dazu bringen, nativ wie folgt zu starten:
[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]$
Das Problem in diesem OP scheint also in der systemd-Konfiguration zu liegen. Wie kann ich es reparieren?
sudo systemctl start tomcat.service
wird eine Reihe von Fehlern verweigert, die Hunderte von Zeilen beanspruchen.Antworten:
Ich hatte das gleiche Problem, das behoben wurde durch:
Erteilen des Besitzes des Tomcat-Benutzers für das gesamte
tomcat
Verzeichnis:und unter /etc/systemd/system/tomcat.service auskommentieren:
quelle
cd /opt && sudo chown -R tomcat tomcat/
geklappt. Weil ich den Besitzer in einen Systembenutzer geändert habe und vergessen habe, Tomcat als Besitzer zurückzugebenDa Sie Java an einem nicht defaltierten Ort installiert haben, müssen Sie tomcat mitteilen, wo es zu finden ist.
In der Unit-Datei, die Sie gepostet haben, ist JAVA_HOME auf / usr / lib / jvm / jre gesetzt, aber im Abschnitt über die Java-Installation ist JAVA_HOME /opt/jdk1.8.0_60.
Wenn Sie JAVA_HOME in der Tomcat-System-Unit-Datei festlegen, wird dies meiner Meinung nach funktionieren.
Die Unit-Datei gibt auch den Benutzer tomcat an. Aber wenn Sie es manuell starten, starten Sie es als root. Das Problem ist wahrscheinlich, dass Tomcat versucht, einen privilegierten Port zu öffnen. Startet das Startskript tomcat als root? Oder startet es Prozesse als Benutzer tomcat? Das Entfernen des Benutzers und der Gruppe aus der Unit-Datei sollte dasselbe Verhalten wie bei Ihrem Befehlszeilenversuch auslösen.
quelle
Laut Fehlermeldungen denke ich, dass das Problem
ExecStop=/bin/kill -15 $MAINPID
dort liegt, wo die Variable nicht ersetzt wird. Laut Servicedokumentation$MAINPID
wird nur fürExecReload
Kommandos gerechnet . Es bleibt die Frage: WarumExecStop
wird ausgeführt, wenn Sie auslösenstart
?Möglicherweise wird
systemd
das JVM-Prozessarbeitsverzeichnis als/
nicht relevant für implementierte Anwendungen belassen.Ich schlage vor , Sie bewegen
CATALINA_OPTS
undJAVA_OPTS
in/opt/tomcat/bin/setenv.sh
Skript und versuchen Sie zunächst mit einer solchen einfachen Konfiguration:In jedem Fall bitte melden
journalctl -xn
undlogs/catalina.out
inhaltlichquelle