Comment éviter que / usr / bin / env soit marqué dans les journaux systemd comme exécutable

15

J'ai créé un service systemd pour exécuter une application tomcat en fonction des informations trouvées dans cet article . La version courte de l'article recommande d'éviter les wrappers de script shell et d'exécuter Java directement, avec l'environnement et la ligne de commande appropriés.

Voici l'intégralité du service systemd (avec le nom de l'application remplacé):

[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

Pour autant que je sache, cela fonctionne très bien. Le service démarre, s'arrête et signale correctement l'état. Le problème que j'ai est avec les journaux tels que rapportés par 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

Voir ici qui envest enregistré comme exécutable en cours d'exécution. Je préférerais de beaucoup voir javal'exécutable, étant donné que c'est le programme qui nous intéresse vraiment. C'est du envbruit. J'ai remarqué un certain nombre de fichiers de service systemd différents qui recommandent de préfixer la commande de démarrage /usr/bin/env, donc j'ai supposé que je pourrais être en mesure de trouver des informations sur les journaux produits. Apparemment non.

Puis-je signaler l'exécutable javaplutôt qu'en envutilisant ce même modèle d'exécution directe de Java (pas les wrappers startup.sh)?

Pour des points supplémentaires, j'aimerais quelques conseils et astuces sur ce que mon fichier de service peut manquer. C'est la première fois que j'écris un service systemd et je souhaite en savoir plus sur les meilleures pratiques.

Josh Smeaton
la source

Réponses:

16

La directive SyslogIdentifier vous permet de définir le nom du nom de l'exécutable dans les journaux.

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