Как избежать пометки / usr / bin / env в журналах systemd как исполняемого файла

15

Я создал службу systemd для запуска приложения tomcat на основе информации, приведенной в этой статье . В короткой версии статьи рекомендуется избегать оболочек сценариев оболочки и выполнять java напрямую с соответствующей средой и командной строкой.

Вот весь сервис systemd (с замененным именем приложения):

[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

Это работает довольно хорошо, насколько я знаю. Служба запускается, останавливается и правильно сообщает о состоянии. У меня проблема с журналами, о которых сообщают 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

Смотрите здесь, envчто регистрируется как работающий исполняемый файл. Я бы предпочел рассматривать его javaкак исполняемый файл, учитывая, что это программа, которая нас действительно волнует Это envшум. Я заметил довольно много разных служебных файлов systemd, которые рекомендуют ставить перед командой start префикс /usr/bin/env, поэтому я предположил, что смогу найти некоторую информацию о созданных журналах. Очевидно нет.

Могу ли я сообщать об исполняемом файле, javaа не envиспользовать тот же самый шаблон непосредственного выполнения Java (не обертки startup.sh)?

Для получения дополнительных баллов, я хотел бы получить некоторые советы и подсказки о том, что мой файл службы может отсутствовать. Это первый раз, когда я написал системный сервис, и я стремлюсь узнать больше о лучших практиках.

Джош Смитон
источник

Ответы:

16

SyslogIdentifier директива позволяет задать имя исполняемого файла в журналах.

SyslogIdentifier=java
# or my app name, but not both!
SyslogIdentifier=myapp
Джош Смитон
источник