So vermeiden Sie, dass / usr / bin / env in systemd-Protokollen als ausführbare Datei markiert wird


15

Ich habe einen systemd-Dienst zum Ausführen einer Tomcat-Anwendung basierend auf den Informationen in diesem Artikel erstellt . In der Kurzversion des Artikels wird empfohlen, die Shell-Script-Wrapper zu vermeiden und Java direkt mit der entsprechenden Umgebung und Befehlszeile auszuführen.

Hier ist die Gesamtheit des systemd-Dienstes (mit dem ersetzten App-Namen):

[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

Soweit ich weiß, funktioniert das ganz gut. Der Dienst startet, stoppt und meldet den Status korrekt. Das Problem, das ich habe, ist mit den Protokollen, die gemeldet werden von 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

Sehen Sie hier, envdass als laufende ausführbare Datei protokolliert wird. Ich würde viel lieber javaals ausführbare Datei sehen, wenn man bedenkt, dass dies das Programm ist, das uns wirklich am Herzen liegt. Das envist Lärm. Ich habe eine ganze Reihe verschiedener Systemd-Servicedateien entdeckt, die empfehlen, dem Startbefehl das Präfix "Start" zu setzen /usr/bin/env, und bin daher davon ausgegangen, dass ich möglicherweise Informationen zu den erstellten Protokollen finde. Scheinbar nicht.

Kann ich die ausführbare Datei melden, javaanstatt envdasselbe Muster für die direkte Ausführung von Java zu verwenden (nicht die Wrapper "startup.sh")?

Für zusätzliche Punkte würde ich gerne einige Hinweise und Tipps dazu erhalten, was in meiner Servicedatei fehlen könnte. Dies ist das erste Mal, dass ich einen systemd-Dienst schreibe, und ich möchte mehr über bewährte Methoden erfahren.

Antworten:


16

Mit der SyslogIdentifier- Direktive können Sie den Namen der ausführbaren Datei in den Protokollen festlegen.

SyslogIdentifier=java
# or my app name, but not both!
SyslogIdentifier=myapp
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.