我认为有一种更优雅的方法来解决这个问题:将 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