Tôi nghĩ có một cách thanh lịch hơn để giải quyết vấn đề: gửi stdout / stderr tới syslog bằng mã định danh và hướng dẫn người quản lý nhật ký hệ thống của bạn chia đầu ra của nó theo tên chương trình.
Sử dụng các thuộc tính sau trong tệp đơn vị dịch vụ systemd của bạn:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
Sau đó, giả sử bản phân phối của bạn đang sử dụng rsyslog để quản lý nhật ký hệ thống, hãy tạo một tệp /etc/rsyslog.d/<new_file>.conf
có nội dung sau:
if $programname == '<your program identifier>' then /path/to/log/file.log
& stop
Bây giờ làm cho tệp nhật ký có thể ghi bằng 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
Khởi động lại rsyslog ( sudo systemctl restart rsyslog
) và tận hưởng! Stdout / stderr chương trình của bạn vẫn sẽ có sẵn thông qua Tạp chí ( sudo journalctl -u <your program identifier>
) nhưng chúng cũng sẽ có sẵn trong tệp bạn chọn.
Nguồn qua archive.org
journalctl -u
vẫn hoạt động nhưng không có gì được gửi đến tập tin được chỉ định.