Я думаю, що є більш елегантний спосіб вирішити проблему: надіслати stdout / stderr в syslog з ідентифікатором і доручити своєму менеджеру syslog розділити його вихід на ім'я програми.
Використовуйте такі властивості у файлі системного сервісного блоку:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
Тоді, припускаючи, що ваш дистрибутив використовує rsyslog для управління syslogs, створіть файл /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
journalctl -u
все ще працює, але нічого не надсилається у вказаний файл.