O serviço Tomcat não vê $ JAVA_HOME

3

Estou tentando configurar um serviço do Tomcat com o Systemd no CentOS 7.

Instalei o Oracle Java 1.8u74 em /usr/java/jdk1.8.0_74 e configurei a variável de ambiente $JAVA_HOME na inicialização da seguinte forma:

# echo "export JAVA_HOME=/usr/java/jdk1.8.0_74" > /etc/profile.d/setenv.sh

Quando eu faço o login no sistema, posso executar echo $JAVA_HOME e ver o caminho correto. Eu instalei o Tomcat e o arquivo tomcat.service tem o seguinte:

# Systemd unit file for Tomcat

[Unit]
Description=Apache Tomcat
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/java/jdk1.8.0_74
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=/opt/tomcat/bin/shutdown.sh

User=tomcat
Group=www

[Install]
WantedBy=multi-user.target

O problema é que, se omitir a linha que lê Environment=JAVA_HOME=/usr/java/jdk1.8.0_74 , o Tomcat não encontrará $ JAVA_HOME, mas espero que encontre $ JAVA_HOME porque está definido em /etc/profile.d/setenv.sh .

Minhas perguntas

  • Não foi encontrado devido à sequência de inicialização (ou seja, o setenv.sh é executado após o início do Systemd)?
  • Coloquei setenv.sh no lugar errado?
  • Qual é a melhor maneira de lidar com isso?
por isapir 19.03.2016 / 05:21

1 resposta

4

Este é o comportamento esperado com o systemd.

Para entender em que ambiente os serviços do systemd são executados, você pode consultar man systemd.exec , especificamente a seção ENVIRONMENT VARIABLES IN SPAWNED PROCESSES . Como diz, apenas poucas variáveis são definidas e você precisa definir qualquer outra coisa sozinho.

Acontece que os arquivos em /etc/profile.d são originados por shells interativos, e é por isso que você pode ver a variável quando você faz o login. O que você fez é exatamente o que o tutorial recomenda, então você pode ficar com ela. . Se você está preocupado com a possibilidade de uma atualização Java interromper seu arquivo de unidade, você pode fazer um link simbólico para a sua instalação do java ou até mesmo criar o arquivo na inicialização:

ExecStart=/bin/sh -c '. /etc/profile.d/setenv.sh; /opt/tomcat/bin/startup.sh'
ExecStop=/bin/sh -c '. /etc/profile.d/setenv.sh; /opt/tomcat/bin/shutdown.sh'

Eu pessoalmente ficaria com o que você já tem.

    
por 19.03.2016 / 09:26