/usr/bin/envがシステムログに実行可能ファイルとして表示されるのを防ぐ方法

/usr/bin/envがシステムログに実行可能ファイルとして表示されるのを防ぐ方法

私は以下で見つけた情報に基づいてTomcatアプリケーションを実行するためのsystemdサービスを作成しました。この記事。この記事の短いバージョンでは、シェルスクリプトラッパーを避け、適切な環境とコマンドラインを使用して直接Javaを実行することをお勧めします。

以下は完全なシステムサービスです(アプリケーション名が置き換えられます)。

[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騒音です。さまざまなシステムサービスファイルで、startコマンドの前にプレフィックスを付けることが提案されていることがわかったので、生成されたログに関する/usr/bin/env情報を見つけることができると思いました。当然いいえ。

javajavaを直接実行するのと同じパターンを使用する代わりにenv(startup.shラッパーの代わりに)実行可能ファイルを報告できますか?

追加として、私のサービスファイルに欠けているものに関するいくつかのヒントとヒントを知りたいです。体系的なサービスを書くのは今回が初めてで、ベストプラクティスについてもっと学びたいです。

ベストアンサー1

これシステムログ識別子ディレクティブを使用すると、ログに実行可能ファイルの名前を設定できます。

SyslogIdentifier=java
# or my app name, but not both!
SyslogIdentifier=myapp

おすすめ記事