システムサービスログをファイルにリダイレクトする

システムサービスログをファイルにリダイレクトする

Ubuntu 16.04でFlumeをシステムサービスとして実行しようとしています。/etc/systemd/system/flume-ng.service

[Unit]
Description=Apache Flume

[Service]
ExecStart=/usr/bin/nohup /opt/flume/current/bin/flume-ng agent -c /etc/flume-ng/conf -f /etc/flume-ng/conf/flume.conf --name a1 &
ExecStop=/opt/flume/current/bin/flume-ng agent stop

[Install]
WantedBy=multi-user.target

次の行を追加してみました。

StandardOutput=/var/log/flume-ng/log1.log
StandardError=/var/log/flume-ng/log2.log   

これは私には効果がありません。systemctl daemon-reload私は飛びました。systemctl restart flume-ng

これがどのように機能するかを知っている人はいますか?

ベストアンサー1

リダイレクト

以下はsystemd v236以降にのみ適用されます。

StandardOutput=file:/var/log/flume-ng/log1.log
StandardError=file:/var/log/flume-ng/log2.log

記録によるとここ

systemdがv236より前の場合は、次のものを使用できます。

ExecStart=/bin/sh -c 'exec /usr/bin/my_binary [arguments] >/var/log/flume-ng/log1.log 2>/var/log/flume-ng/log2.log'

これにより、サービスが再起動されるたびにログファイルの内容全体が上書きされます。

追加

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

# Works only in systemd v240 and newer!
# (but backported to e.g. RHEL8)
StandardOutput=append:/var/log/flume-ng/log1.log
StandardError=append:/var/log/flume-ng/log2.log

systemdがv240より古い場合は、次のものを使用できます。

ExecStart=/bin/sh -c 'exec /usr/bin/my_binary [arguments] >>/var/log/flume-ng/log1.log 2>>/var/log/flume-ng/log2.log'

execmy_binaryつまり、フォーキングなしでリダイレクトを設定した後、シェルプログラムがそのプログラムに置き換えられることを意味します。したがって、my_binary自分で実行することとは違いはありませんExecStart=

おすすめ記事