tomcat 8 non si avvia dopo l'installazione iniziale


18

Sto cercando di installare Tomcat su una nuova macchina virtuale CentOS 7. Ho installato apache httpd correttamente e sono in grado di ottenere la pagina di test apache quando digito l'ip della macchina virtuale in un browser Web su un altro computer in rete. Ma durante la digitazione viene visualizzato il seguente messaggio di errore systemctl start tomcat:

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

Ecco la cronologia completa dei comandi nell'installazione di java e tomcat:

Ho iniziato installando Java usando le istruzioni di questo tutorial perché le istruzioni di Tomcat (secondo blocco di seguito) volevano che usassi openjdk, e ho bisogno di usare Java reale:

//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

Nota che il tutorial precedente non spiega come inserire le variabili d'ambiente /etc/environment, quindi mi sono fermato prima di quel comando.

I seguenti comandi provengono da questo altro tutorial . Ho iniziato al punto dopo aver installato 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

Processo per tomcat.service non riuscito. Vedi 'systemctl status tomcat.service' e 'journalctl -xn' per i dettagli. # sudo systemctl abilita tomcat.service ln -s '/etc/systemd/system/tomcat.service' '/etc/systemd/system/multi-user.target.wants/tomcat.service' # sudo systemctl abilita 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.

Fare un yum localinstallrpm jdk aggiornato, come suggerito in questo altro post , non ha funzionato.


Modifiche:


Come suggerito da @ Bram, ho cambiato il file di configurazione nel seguente, ma sto ancora ottenendo lo stesso errore:

# 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

Inoltre, secondo il commento di @ JeffSchaller nella chat, sono stato in grado di avviare Tomcat in modo nativo come segue:

[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]$

Quindi il problema in questo PO sembra essere con la configurazione di systemd. Come posso ripararlo?


Eventuali errori nel file di registro di Tomcat? Se ricordo bene il file si chiama catalina.out o qualcosa del genere.
Bram,

I log di Tomcat dopo sudo systemctl start tomcat.servicesono un mucchio di errori negati per l'autorizzazione che impiegano centinaia di righe.
CodeMed,

Risposte:


16

Ho avuto lo stesso problema, risolto da:

  1. dando all'utente Tomcat la proprietà dell'intera tomcatdirectory:

    cd /opt && sudo chown -R tomcat tomcat/
    
  2. e commentando sotto la riga in /etc/systemd/system/tomcat.service:

    Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
    

1
È sicuro rendere tomcat il proprietario dell'intera cartella? Pensavo che volessimo limitare l'accesso il più possibile?
user3203425

Non ho questa configurazione per testare ora, ma penso che il problema fosse: "sudo chown -R tomcat work / temp / logs /". Direi che necessita almeno della proprietà di "bin /".
user2968675

Sembra che il solo passaggio 1 l'abbia fatto per me. Cosa fa esattamente la linea del passaggio 2?
Kimberly W,

Hai ragione, il passaggio 1 è sufficiente per risolvere questo particolare problema. Il passaggio 2 imposta le dimensioni dell'heap java e il tipo di garbage collection. Ne avevo bisogno a causa delle proprietà del mio ambiente, ma la maggior parte delle persone probabilmente no.
user2968675

nel mio caso ha cd /opt && sudo chown -R tomcat tomcat/funzionato solo . Perché ho cambiato il proprietario in utente di sistema e ho dimenticato di ripristinare Tomcat come proprietario
imdzeeshan,

2

Poiché hai installato Java in una posizione non defalt, devi dire a Tomcat dove trovarlo.

Nel file di unità che hai pubblicato JAVA_HOME è impostato su / usr / lib / jvm / jre ma nella sezione relativa all'installazione di Java JAVA_HOME è /opt/jdk1.8.0_60.

Se imposti JAVA_HOME nel file di unità Tomcat Systemd credo che funzionerà.

Anche il file di unità specifica l'utente tomcat. Ma quando lo avvii manualmente, lo avvii come root. È probabile che Tomcat tenti di aprire una porta privilegiata. Lo script di avvio avvia tomcat come root? O avvia i processi come Tomcat utente? La rimozione dell'utente e del gruppo dal file di unità dovrebbe attivare lo stesso comportamento del tentativo della riga di comando.


Come correggere il seguente errore: Processo per tomcat8.service non riuscito perché il processo di controllo è stato chiuso con un codice di errore. Vedere "status systemctl tomcat8.service" e "journalctl -xe" per i dettagli. invoke-rc.d: initscript tomcat8, azione "start" non riuscita. -> sudo nano / etc / default / tomcat8 -> Imposta JAVA_HOME JAVA_HOME = / usr / lib / jvm / java-8-oracle -> gist.github.com/alexislucena/89a046dc747123faf4496fb946c1fe79
Combine

1

Secondo i messaggi di errore, penso che il problema provenga da ExecStop=/bin/kill -15 $MAINPIDdove la variabile non viene sostituita. Secondo la documentazione di servizio $MAINPIDè previsto solo il ExecReloadcomando. La domanda rimane: perché ExecStopviene eseguito quando si attiva start?

È possibile systemdche la directory di lavoro del processo JVM /non sia rilevante per le applicazioni distribuite.

Vi propongo si sposta CATALINA_OPTSe JAVA_OPTSin /opt/tomcat/bin/setenv.shsceneggiatura e tenta prima con una configurazione così semplice:

[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 ogni caso, si prega di segnalare journalctl -xne logs/catalina.outcontenuti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.