1. ホーム
  2. linux

[解決済み】systemdサービスの出力をファイルにリダイレクトする方法

2022-04-03 21:01:51

質問

の出力をリダイレクトしようとしています。 systemd サービスをファイルに保存したいのですが、うまくいかないようです。

[Unit]
Description=customprocess
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/binary1 agent -config-dir /etc/sample.d/server
StandardOutput=/var/log1.log
StandardError=/var/log2.log
Restart=always

[Install]
WantedBy=multi-user.target

私のやり方を訂正してください。

どのように解決するのですか?

stdout/stderrを識別子付きでsyslogに送り、その出力をプログラム名で分割するようsyslogマネージャに指示する、というのがもっとエレガントな解決方法だと思います。

systemd のサービスユニットファイルで以下のプロパティを使用します。

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote

次に、ディストリビューションが rsyslog を使って syslog を管理していると仮定して、 ファイルを /etc/rsyslog.d/<new_file>.conf を以下の内容で作成します。

if $programname == '<your program identifier>' then /path/to/log/file.log
& stop

ここで、ログファイルをsyslogで書き込み可能にします。

# ls -alth /var/log/syslog 
-rw-r----- 1 syslog adm 439K Mar  5 19:35 /var/log/syslog
# chown syslog:adm /path/to/log/file.log

rsyslogを再起動する ( sudo systemctl restart rsyslog ) で、お楽しみください。あなたのプログラムの stdout/stderr は、まだ journalctl ( sudo journalctl -u <your program identifier> ) が、選択したファイルでも利用できるようになります。

ソースはarchive.org経由