Eu acho que existe uma maneira mais elegante de resolver o problema: envie o stdout / stderr para o syslog com um identificador e instrua seu gerenciador de syslog a dividir sua saída pelo nome do programa.
Use as seguintes propriedades no arquivo da unidade de serviço systemd:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
Supondo que sua distribuição esteja usando o rsyslog para gerenciar os syslogs, crie um arquivo /etc/rsyslog.d/<new_file>.conf
com o seguinte conteúdo:
if $programname == '<your program identifier>' then /path/to/log/file.log
& stop
Agora torne o arquivo de log gravável por 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
Reinicie o rsyslog ( sudo systemctl restart rsyslog
) e divirta-se! Seu programa stdout / stderr ainda estará disponível no journalctl ( sudo journalctl -u <your program identifier>
), mas eles também estarão disponíveis no seu arquivo de escolha.
Fonte via archive.org
journalctl -u
ainda funciona, mas nada é enviado para o arquivo especificado.