Jak uniknąć oznaczania / usr / bin / env w logach systemd jako pliku wykonywalnego

15

Stworzyłem usystematyzowaną usługę do uruchamiania aplikacji tomcat na podstawie informacji zawartych w tym artykule . W krótkiej wersji tego artykułu zaleca się unikanie owijania skryptów powłoki i bezpośrednie uruchamianie java za pomocą odpowiedniego środowiska i wiersza poleceń.

Oto całość usługi systemowej (z zastąpioną nazwą aplikacji):

[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

O ile mi wiadomo, działa to całkiem dobrze. Usługa uruchamia się, zatrzymuje i zgłasza poprawnie status. Mam problem z logami zgłoszonymi przez 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

Zobacz tutaj, który envjest rejestrowany jako działający plik wykonywalny. Wolałbym raczej zobaczyć javajako plik wykonywalny, biorąc pod uwagę, że to program, na którym nam naprawdę zależy. To envjest hałas. Zauważyłem całkiem sporo różnych plików usługi systemowej, które zalecają prefiks komendy start /usr/bin/env, więc założyłem, że być może uda mi się znaleźć informacje na temat utworzonych dzienników. Najwyraźniej nie.

Czy mogę zgłosić plik wykonywalny javaraczej niż envpodczas korzystania z tego samego wzorca bezpośredniego wykonywania Java (a nie opakowań startup.sh)?

Aby uzyskać dodatkowe punkty, chciałbym uzyskać kilka wskazówek i porad dotyczących tego, czego może brakować w moim pliku usługi. To pierwszy raz, kiedy napisałem usługę systemową i chcę dowiedzieć się więcej o najlepszych praktykach.

Josh Smeaton
źródło

Odpowiedzi:

16

SyslogIdentifier dyrektywa pozwala na ustawienie nazwy nazwy pliku wykonywalnego w dziennikach.

SyslogIdentifier=java
# or my app name, but not both!
SyslogIdentifier=myapp
Josh Smeaton
źródło