Je pense qu'il existe une manière plus élégante de résoudre le problème : envoyez le stdout/stderr à syslog avec un identifiant et demandez à votre gestionnaire syslog de diviser sa sortie par nom de programme.
Utilisez les propriétés suivantes dans votre fichier d'unité de service systemd :
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
Ensuite, en supposant que votre distribution utilise rsyslog pour gérer les syslogs, créez un fichier dans le répertoire /etc/rsyslog.d/<new_file>.conf
avec le contenu suivant :
if $programname == '<your program identifier>' then /path/to/log/file.log
& stop
Maintenant, rendez le fichier journal accessible en écriture par 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
Redémarrer rsyslog ( sudo systemctl restart rsyslog
) et profitez-en ! Votre programme stdout/stderr sera toujours disponible via journalctl ( sudo journalctl -u <your program identifier>
) mais ils seront également disponibles dans le fichier de votre choix.
Source : archive.org