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