o tomcat 8 não será iniciado após a instalação inicial

18

Estou tentando instalar o tomcat em uma nova máquina virtual do CentOS 7. Instalei o apache httpd com êxito e consigo obter a página de teste do apache quando digito o ip da máquina virtual em um navegador da web em outro computador na rede. Mas estou recebendo a seguinte mensagem de erro quando digito systemctl start tomcat:

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

Aqui está o histórico completo dos comandos na instalação do java e tomcat:

Comecei instalando o java usando as instruções deste tutorial porque as instruções do tomcat (segundo bloco abaixo) queriam que eu usasse o openjdk e preciso usar o 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

Observe que o tutorial anterior não explica como inserir as variáveis ​​de ambiente /etc/environment, então parei antes desse comando.

Os comandos a seguir são deste outro tutorial . Comecei no ponto após instalar o 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

A tarefa do tomcat.service falhou. Consulte 'systemctl status tomcat.service' e 'journalctl -xn' para obter detalhes. # 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.

Executar um yum localinstallde um jdk rpm atualizado, conforme sugerido nesta outra postagem , não funcionou.


EDITAR% S:


De acordo com a sugestão de @ Bram, alterei o arquivo de configuração para o seguinte, mas ainda estou recebendo o mesmo erro:

# 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

Além disso, conforme o comentário de @ JeffSchaller no bate-papo, eu consegui que o tomcat iniciasse nativamente da seguinte maneira:

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

Portanto, o problema neste OP parece estar com a configuração do systemd. Como posso corrigir isso?

CodeMed
fonte
Algum erro no arquivo de log do tomcat? Se bem me lembro, o arquivo é chamado catalina.out ou algo assim.
Bram
Os logs do Tomcat depois sudo systemctl start tomcat.servicesão um monte de erros de permissão negada que levam centenas de linhas.
CodeMed 13/10/2015

Respostas:

16

Eu tive o mesmo problema, corrigi-lo por:

  1. fornecendo ao usuário tomcat a propriedade de todo o tomcatdiretório:

    cd /opt && sudo chown -R tomcat tomcat/
    
  2. e comentando a linha abaixo em /etc/systemd/system/tomcat.service:

    Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
    
user2968675
fonte
1
É seguro tornar o tomcat o proprietário de toda a pasta? Eu pensei que queremos restringir o acesso, tanto quanto possível?
user3203425
Não tenho essa configuração para testar agora, mas acho que o problema estava em: "sudo chown -R tomcat work / temp / logs /". Eu diria que também precisa da propriedade "bin /".
user2968675
Passo 1 sozinho fez isso por mim, parece. O que a linha na etapa 2 faz exatamente?
Kimberly W
Você está certo, a etapa 1 é suficiente para corrigir esse problema específico. A etapa 2 define o tamanho da pilha java e o tipo de coleta de lixo. Eu precisava disso por causa das propriedades do meu ambiente, mas a maioria das pessoas provavelmente não precisará.
usar o seguinte comando
no meu caso, só cd /opt && sudo chown -R tomcat tomcat/funcionou. Porque eu mudei o proprietário para o usuário do sistema e se esqueceu de fazer tomcat como proprietário de volta
imdzeeshan
2

Desde que você instalou o Java em um local sem padrão, é necessário informar ao tomcat onde encontrá-lo.

No arquivo de unidade que você publicou, JAVA_HOME está definido como / usr / lib / jvm / jre, mas na seção sobre a instalação do Java, JAVA_HOME é /opt/jdk1.8.0_60.

Se você definir JAVA_HOME no arquivo de unidade do tomcat systemd, acredito que funcionará.

Além disso, o arquivo da unidade especifica o usuário tomcat. Mas quando você o inicia manualmente, você o inicia como root. O problema é provável que o tomcat tente abrir uma porta privilegiada. O script de inicialização inicia o tomcat como root? Ou ele inicia processos como usuário tomcat? A remoção do usuário e do grupo do arquivo da unidade deve desencadear o mesmo comportamento da sua tentativa de linha de comando.

Bram
fonte
Como corrigir o seguinte erro: A tarefa do tomcat8.service falhou porque o processo de controle saiu com o código de erro. Consulte "status do systemctl tomcat8.service" e "journalctl -xe" para obter detalhes. invoke-rc.d: initscript tomcat8, ação "start" falhou. -> sudo nano / etc / default / tomcat8 -> Configure JAVA_HOME JAVA_HOME = / usr / lib / jvm / java-8-oracle -> gist.github.com/alexislucena/89a046dc747123faf4496fb946c1fe79
Combine
1

De acordo com as mensagens de erro, acho que o problema vem de ExecStop=/bin/kill -15 $MAINPIDonde a variável não é substituída. De acordo com a documentação do serviço, $MAINPIDé esperado apenas para ExecReloadcomando. A questão permanece: por que ExecStopé executada quando você dispara start?

É possível systemddeixar o diretório de trabalho do processo da JVM, o /que pode não ser relevante para aplicativos implementados.

Proponho que você move CATALINA_OPTSe JAVA_OPTSem /opt/tomcat/bin/setenv.shroteiro e tentar primeiro com uma configuração tão simples:

[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

Em qualquer caso, por favor relate journalctl -xne logs/catalina.outconte

Yves Martin
fonte