Estou migrando desubir na vidaparasistema. Estou tendo um pouco de dificuldade para fazer a transição com oArquivo Ambientedirectiva. Eu não consigo entender issoArquivo Ambientetrabalhar:
########################################################
# Catalina Settings
CLUSTER_BASE=/d01/tomcat/prod/xyz
CATALINA_BASE=$CLUSTER_BASE/1
CATALINA_TMPDIR=$CATALINA_BASE/temp
CATALINA_HOME=/usr/share/tomcat7
CATALINA_PID=/run/tomcat/tc-prod-xyz-1.pid
########################################################
# Java Settings
JAVA_HOME=/usr/lib/jvm/default-java/jre
JAVA_OPTS=-Djava.awt.headless=true
JAVA_OPTS=$JAVA_OPTS -server
JAVA_OPTS=$JAVA_OPTS -Xms2048m
JAVA_OPTS=$JAVA_OPTS -Xmx2048m
JAVA_OPTS=$JAVA_OPTS -XX:MaxPermSize=2048m
JAVA_OPTS=$JAVA_OPTS -XX:+UseParallelGC
JAVA_OPTS=$JAVA_OPTS -XX:+AggressiveHeap
JAVA_OPTS=$JAVA_OPTS -javaagent:$CLUSTER_BASE/newrelic/newrelic.jar
Parece que este tipo de instrução onde reutilizo uma variável:
JAVA_OPTS=$JAVA_OPTS -XX:+UseParallelGC
não é suportado emsistemacomo se estivesse emsubir na vida. Fazsistemaapoiar algo assim ou preciso fazer uma declaração longa e difícil de ler?
Responder1
Infelizmente, esse arquivo que você possui é na verdade um script de shell. No passado, a maioria dos sistemas/scripts de inicialização interpretavam arquivos que forneciam variáveis de ambiente usando o shell, para que você pudesse fazer coisas de shell neles. O Systemd, entretanto, não faz isso. O arquivo de ambiente é realmente um arquivo de ambiente, não um script. Isto está documentado nosystemd.exec
página de manual:
A expansão de variáveis não é realizada dentro das strings, entretanto, a expansão do especificador é possível. O caractere $ não tem nenhum significado especial.
Portanto você tem 2 opções.
Expanda todas as suas variáveis manualmente. Significado uso
CATALINA_BASE=/d01/tomcat/prod/xyz/1
.Avalie o arquivo com o shell:
ExecStart=/bin/bash -ac '. /path/to/env_file; exec /path/to/program'
Responder2
Preciso fazer uma declaração longa e difícil de ler?
Não
Uma linha que termine com uma barra invertida será concatenada com a seguinte, permitindo definições de variáveis multilinhas.
Responder3
No caso específico do Tomcat (como nesta pergunta), descobri que é mais fácil colocar a maioria dessas configurações no bin/setenv.sh
, que é executado pelo Tomcat na inicialização, e avalia as variáveis no shell script conforme o esperado.
Então, em /etc/systemd/system/tomcat.service
eu apenas especifico as Environment
variáveis para CATALINA_BASE
and CATALINA_HOME
e depois coloco o resto do material em ${CATALINA_BASE}/bin/setenv.sh
.
Responder4
Outra opção: Ter uma unidade secundária que rode antes desta e crie uma EnvironmentFile
que possa usar:https://stackoverflow.com/a/42841480/32453
A unidade secundária pode usar o bash, por exemplo. Parece ser o systemd
caminho para importar env. :|