如何避免在系统日志中将/ usr / bin / env标记为可执行文件


15

我已经根据本文中的信息创建了一个systemd服务来运行tomcat应用程序。本文的简短版本建议避免使用Shell脚本包装程序,并使用适当的环境和命令行直接执行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包装器)报告可执行文件吗?

对于其他问题,我想提供一些有关服务文件可能丢失的提示和技巧。这是我第一次编写系统服务,并且热衷于学习有关最佳实践的更多信息。

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.