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, env
dass als laufende ausführbare Datei protokolliert wird. Ich würde viel lieber java
als ausführbare Datei sehen, wenn man bedenkt, dass dies das Programm ist, das uns wirklich am Herzen liegt. Das env
ist 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, java
anstatt env
dasselbe 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.