Si vous avez une distribution plus récente avec un nouveau systemd
(systemd
version 236 ou plus récente), vous pouvez définir les valeurs de StandardOutput
ou StandardError
à file:YOUR_ABSPATH_FILENAME
.
Longue histoire :
Dans les nouvelles versions de systemd
il existe une option relativement nouvelle (la requête github date de 2016 et l'amélioration est fusionnée/fermée en 2017) où vous pouvez définir les valeurs de StandardOutput
ou StandardError
à file:YOUR_ABSPATH_FILENAME
. Le file:path
l'option est documentée dans le plus récent systemd.exec
page de manuel.
Cette nouvelle fonctionnalité est relativement nouvelle et n'est donc pas disponible pour les anciennes distributions comme centos-7 (ou n'importe quel centos avant).
Je pense qu'il existe une manière plus élégante de résoudre le problème :envoyez 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 /etc/rsyslog.d/<new_file>.conf
avec le contenu suivant :
if $programname == '<your program identifier>' then /path/to/log/file.log
& stop
Rendez maintenant 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émarrez rsyslog (sudo systemctl restart rsyslog
) et apprécie! 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 via archive.org