Cómo evitar que / usr / bin / env se marque en los registros de systemd como el ejecutable

15

Creé un servicio systemd para ejecutar una aplicación tomcat basada en la información que se encuentra en este artículo . La versión corta del artículo recomienda evitar los envoltorios de script de shell y ejecutar java directamente, con el entorno y la línea de comandos adecuados.

Aquí está la totalidad del servicio systemd (con el nombre de la aplicación reemplazado):

[Unit]
Description=MyApp Tomcat Container

[Service]
EnvironmentFile=/opt/myapp/environment
ExecStart=/usr/bin/env ${JAVA_HOME}/bin/java $JAVA_OPTS $CATALINA_OPTS \
-classpath ${CLASSPATH} \
-Dcatalina.base=${CATALINA_BASE} \
-Dcatalina.home=${CATALINA_HOME} \
-Djava.endorsed.dirs=${JAVA_ENDORSED_DIRS} \
-Djava.io.tmpdir=${CATALINA_TMPDIR} \
-Djava.util.logging.config.file=${CATALINA_BASE}/conf/logging.properties \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
org.apache.catalina.startup.Bootstrap start

ExecStop=/usr/bin/env $JAVA_HOME/bin/java $JAVA_OPTS \
-classpath $CLASSPATH \
-Dcatalina.base=$CATALINA_BASE \
-Dcatalina.home=$CATALINA_HOME \
-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS \
-Djava.io.tmpdir=$CATALINA_TMPDIR \
-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
org.apache.catalina.startup.Bootstrap stop

[Install]
WantedBy=multi-user.target

Esto funciona bastante bien hasta donde yo sé. El servicio se inicia, se detiene e informa el estado correctamente. El problema que tengo es con los registros según lo informado por journalctl:

# journalctl -u myapp.service --since today

Sep 14 00:26:00 myserver.domain.com env[654]: MyApp:2015-09-14 00:26:00: INFO Detail irrelevant
Sep 14 00:26:00 myserver.domain.com env[654]: MyApp:2015-09-14 00:26:00: INFO Detail irrelevant
Sep 14 00:26:17 myserver.domain.com env[654]: MyApp:2015-09-14 00:26:17: INFO Detail irrelevant

Vea aquí que envse está registrando como el ejecutable en ejecución. Preferiría verlo javacomo el ejecutable, considerando que ese es el programa que realmente nos importa. El enves ruido. He notado algunos archivos de servicio systemd diferentes que recomiendan prefijar el comando de inicio /usr/bin/env, por lo que supuse que podría encontrar alguna información sobre los registros producidos. Aparentemente no.

¿Puedo informar el ejecutable en javalugar de envutilizar este mismo patrón de ejecución de Java directamente (no los envoltorios startup.sh)?

Para obtener puntos adicionales, me encantaría algunos consejos y sugerencias sobre lo que podría faltar mi archivo de servicio. Esta es la primera vez que escribo un servicio systemd, y estoy ansioso por aprender más sobre las mejores prácticas.

Josh Smeaton
fuente

Respuestas:

16

La directiva SyslogIdentifier le permite establecer el nombre del nombre ejecutable en los registros.

SyslogIdentifier=java
# or my app name, but not both!
SyslogIdentifier=myapp
Josh Smeaton
fuente