web-dev-qa-db-ja.com

systemd:stdoutをログファイルにリダイレクトする方法

私はsystemdサービスを持っています:

[Unit]
Description=My application

[Service]
ExecStart=/bin/Java myapp.jar
Type=simple
User=photo

オプションがあります:StandardOutput =しかし、それを使用してファイルに書き込む方法がわかりません。 https://www.freedesktop.org/software/systemd/man/systemd.exec.html

ファイルパスをどこかに置くと思っていましたが、ドキュメントではソケットとファイル記述子について説明しています。キーワードだけではなく、より多くの設定が必要なようです。

ファイルパスをどこに置くか?その使用例は見つかりません

ありがとう

4
exeral

使用する:

[Unit]
Description=My application

[Service]
ExecStart=/usr/bin/Java -jar myapp.jar
Type=simple
User=photo
StandardOutput=file:/var/log/logfile

ここに記載されているとおり: https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=

この方法では、サービスが再起動するたびにログファイルの内容が上書きされることに注意してください。 StandardOutput/Error systemdディレクティブはファイルへの追加をサポートしていません。

サービスの再起動間でファイルログを維持し、ログに新しい行を追加するだけの場合は、代わりに次を使用します。

[Unit]
Description=My application

[Service]
ExecStart=/usr/bin/sh -c 'exec /usr/bin/Java -jar myapp.jar'
Type=simple
User=photo

execは、シェルプログラムが、フォークせずにリダイレクトをセットアップした後、/bin/Javaプログラムに置き換えられることを意味します。したがって、/bin/Javaの直後にExecStart=を実行する場合と違いはありません。

2