systemd:標準出力をログファイルにリダイレクトする方法

systemd:標準出力をログファイルにリダイレクトする方法

システムサービスがあります。

[Unit]
Description=My application

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

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

ファイルパスをどこかに置くことを望みましたが、マニュアルではソケットとファイル記述子について説明します。そのキーワードよりも多くの設定が必要なようです。

ファイルパスはどこに置くべきですか? この用途の例が見つかりません。

ありがとう

答え1

使用:

[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/Errorsystemd ディレクティブはファイルの追加をサポートしていません。

サービスの再起動中にファイルログを保持し、新しい行のみを追加するには、代わりに次を使用します。

[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

アプリケーションがPythonスクリプトの場合は、以下も設定する必要があります。

Environment=PYTHONUNBUFFERED=1

それ以外の場合、バッファがフラッシュされるまでログメッセージは表示されません。

関連情報