tomcat 8 wird nach der erstmaligen Installation nicht gestartet

18

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 localinstallAusfü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?

CodeMed
quelle
Fehler in der Tomcat-Protokolldatei? Wenn ich mich richtig erinnere, heißt die Datei catalina.out oder so ähnlich.
Bram
Nach Tomcat-Protokollen sudo systemctl start tomcat.servicewird eine Reihe von Fehlern verweigert, die Hunderte von Zeilen beanspruchen.
CodeMed

Antworten:

16

Ich hatte das gleiche Problem, das behoben wurde durch:

  1. Erteilen des Besitzes des Tomcat-Benutzers für das gesamte tomcatVerzeichnis:

    cd /opt && sudo chown -R tomcat tomcat/
    
  2. und unter /etc/systemd/system/tomcat.service auskommentieren:

    Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
    
user2968675
quelle
1
Ist es sicher, tomcat zum Besitzer des gesamten Ordners zu machen? Ich dachte, wir wollen den Zugang so weit wie möglich einschränken?
user3203425
Ich habe dieses Setup jetzt nicht zum Testen, aber ich denke, das Problem war: "sudo chown -R tomcat work / temp / logs /". Ich würde sagen, es braucht zumindest auch den Besitz von "bin /".
user2968675
Schritt 1 allein hat es für mich getan, wie es scheint. Was macht die Zeile in Schritt 2 genau?
Kimberly W
Sie haben Recht, Schritt 1 reicht aus, um dieses spezielle Problem zu beheben. In Schritt 2 werden die Größe des Java-Heapspeichers und der Garbage Collection-Typ festgelegt. Ich brauchte es wegen meiner Umgebungseigenschaften, aber die meisten Leute werden es wahrscheinlich nicht.
User2968675
in meinem fall hat nur 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ückzugeben
imdzeeshan 31.10.17
2

Da 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.

Bram
quelle
Beheben des folgenden Fehlers: Der Auftrag für tomcat8.service ist fehlgeschlagen, da der Steuerprozess mit Fehlercode beendet wurde. Weitere Informationen finden Sie unter "systemctl status tomcat8.service" und "journalctl -xe". invoke-rc.d: initscript tomcat8, Aktion "Start" fehlgeschlagen. -> sudo nano / etc / default / tomcat8 -> Set JAVA_HOME JAVA_HOME = / usr / lib / jvm / java-8-Orakel -> gist.github.com/alexislucena/89a046dc747123faf4496fb946c1fe79
Kombinieren
1

Laut Fehlermeldungen denke ich, dass das Problem ExecStop=/bin/kill -15 $MAINPIDdort liegt, wo die Variable nicht ersetzt wird. Laut Servicedokumentation $MAINPIDwird nur für ExecReloadKommandos gerechnet . Es bleibt die Frage: Warum ExecStopwird ausgeführt, wenn Sie auslösen start?

Möglicherweise wird systemddas JVM-Prozessarbeitsverzeichnis als /nicht relevant für implementierte Anwendungen belassen.

Ich schlage vor , Sie bewegen CATALINA_OPTSund JAVA_OPTSin /opt/tomcat/bin/setenv.shSkript und versuchen Sie zunächst mit einer solchen einfachen Konfiguration:

[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

In jedem Fall bitte melden journalctl -xnund logs/catalina.outinhaltlich

Yves Martin
quelle