Creo que hay una manera más elegante de resolver el problema: envíe stdout / stderr a syslog con un identificador e indique a su administrador de syslog que divida su salida por nombre de programa.
Use las siguientes propiedades en su archivo de unidad de servicio systemd:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
Luego, suponiendo que su distribución esté utilizando rsyslog para administrar syslogs, cree un archivo /etc/rsyslog.d/<new_file>.conf
con el siguiente contenido:
if $programname == '<your program identifier>' then /path/to/log/file.log
& stop
Ahora haga que el archivo de registro sea editable 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 rsyslog ( sudo systemctl restart rsyslog
) y disfrute! Su programa stdout / stderr todavía estará disponible a través de journalctl ( sudo journalctl -u <your program identifier>
) pero también estará disponible en su archivo de elección.
Fuente vía archive.org
journalctl -u
aún funciona pero no se envía nada al archivo especificado.