新しい systemd
の新しいディストリビューションがある場合 (systemd
バージョン 236 以降)、StandardOutput
の値を設定できます。 または StandardError
file:YOUR_ABSPATH_FILENAME
まで .
長い話:
systemd
の新しいバージョンでは StandardOutput
の値を設定できる比較的新しいオプションがあります (github リクエストは 2016 っぽいもので、拡張機能は 2017 っぽいものでマージ/クローズされています)。 または StandardError
file:YOUR_ABSPATH_FILENAME
まで . file:path
オプションは最新の systemd.exec
に記載されています
この新機能は比較的新しいため、centos-7 (またはそれ以前の centos) などの古いディストリビューションでは利用できません。
この問題を解決するもっと洗練された方法があると思います: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 からのソース