Come evitare / usr / bin / env essere marcato nei file systemd come eseguibile


15

Ho creato un servizio systemd per eseguire un'applicazione Tomcat in base alle informazioni contenute in questo articolo . La versione breve dell'articolo raccomanda di evitare i wrapper di script della shell e di eseguire java direttamente, con l'ambiente e la riga di comando appropriati.

Ecco l'intero servizio di systemd (con il nome dell'app sostituito):

[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

Funziona abbastanza bene per quanto ne so. Il servizio si avvia, si arresta e riporta correttamente lo stato. Il problema che sto riscontrando è con i registri come riportato da 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

Vedi qui quello env viene registrato come eseguibile in esecuzione. Preferirei di gran lunga vedere javal'eseguibile, considerando che è il programma a cui teniamo davvero. Il envè il rumore. Ho notato diversi file di servizio di systemd che raccomandano di aggiungere un prefisso al comando start /usr/bin/env, quindi ho pensato che potrei essere in grado di trovare alcune informazioni sui registri prodotti. Apparentemente no.

Posso segnalare l'eseguibile come java anziché anziché envutilizzare direttamente lo stesso schema di esecuzione di java (non i wrapper startup.sh)?

Per i punti extra, vorrei alcuni consigli e suggerimenti su ciò che il mio file di servizio potrebbe mancare. Questa è la prima volta che scrivo un servizio systemd e sono impaziente di saperne di più sulle migliori pratiche.

Risposte:


16

La direttiva SyslogIdentifier consente di impostare il nome del nome eseguibile nei registri.

SyslogIdentifier=java
# or my app name, but not both!
SyslogIdentifier=myapp
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.