Я думаю, что есть более элегантный способ решения проблемы: отправьте stdout / stderr в syslog с идентификатором и дайте команду своему администратору syslog разделить вывод по имени программы.
Используйте следующие свойства в вашем файле systemd service unit:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
Затем, если ваш дистрибутив использует rsyslog для управления системными журналами, создайте файл /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
все еще работает, но в указанный файл ничего не отправляется.