estoy migrando deadvenedizoasistemad. Estoy teniendo algunos problemas para hacer la transición con elMedio AmbienteArchivodirectiva. no puedo conseguir estoMedio AmbienteArchivotrabajar:
########################################################
# 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
Parecería que este tipo de declaración donde reutilizo una variable:
JAVA_OPTS=$JAVA_OPTS -XX:+UseParallelGC
no es compatible consistemadcomo si estuviera enadvenedizo. Hacesistemad¿Apoyo algo como esto o necesito hacer una declaración larga y difícil de leer?
Respuesta1
Lamentablemente, ese archivo que tiene es en realidad un script de shell. En el pasado, la mayoría de los sistemas/scripts de inicio han interpretado archivos que proporcionan variables de entorno mediante el uso del shell, por lo que podría salirse con la suya haciendo cosas del shell en ellos. Systemd sin embargo no hace esto. El archivo de entorno es realmente un archivo de entorno, no un script. Esto está documentado en elsystemd.exec
página de manual:
La expansión de variables no se realiza dentro de las cadenas; sin embargo, es posible la expansión de especificadores. El carácter $ no tiene ningún significado especial.
Por lo tanto tienes 2 opciones.
Expanda todas sus variables manualmente. Uso del significado
CATALINA_BASE=/d01/tomcat/prod/xyz/1
.Evalúe el archivo con el shell:
ExecStart=/bin/bash -ac '. /path/to/env_file; exec /path/to/program'
Respuesta2
¿Necesito hacer una declaración larga y difícil de leer?
No
Una línea que termina con una barra invertida se concatenará con la siguiente, permitiendo definiciones de variables multilínea.
Respuesta3
En el caso específico de Tomcat (como en esta pregunta), descubrí que es más fácil colocar la mayoría de estas configuraciones en bin/setenv.sh
, que Tomcat ejecuta al inicio y evalúa las variables en el script de shell como se esperaba.
Así que /etc/systemd/system/tomcat.service
solo especifico las Environment
variables para CATALINA_BASE
y CATALINA_HOME
y luego pongo el resto del material ${CATALINA_BASE}/bin/setenv.sh
.
Respuesta4
Otra opción: tener una unidad secundaria que se ejecute antes que esta y cree una EnvironmentFile
que pueda usar:https://stackoverflow.com/a/42841480/32453
La unidad secundaria puede usar bash, por ejemplo. Parece ser la systemd
forma de importar env. :|