Si tiene una distribución más nueva con un systemd
más nuevo (systemd
versión 236 o posterior), puede establecer los valores de StandardOutput
o StandardError
a file:YOUR_ABSPATH_FILENAME
.
Larga historia:
En versiones más recientes de systemd
hay una opción relativamente nueva (la solicitud de github es de 2016 ish y la mejora se fusionó / cerró 2017 ish) donde puede establecer los valores de StandardOutput
o StandardError
a file:YOUR_ABSPATH_FILENAME
. El file:path
La opción está documentada en el systemd.exec
más reciente. página man.
Esta nueva característica es relativamente nueva y, por lo tanto, no está disponible para distribuciones más antiguas como centos-7 (o cualquier centos anterior).
Creo que hay una forma más elegante de resolver el problema:envíe el 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, asumiendo que su distribución usa rsyslog para administrar syslogs, cree un archivo en /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 escribible 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 disfrutar! Su programa stdout/stderr seguirá estando disponible a través de journalctl (sudo journalctl -u <your program identifier>
) pero también estarán disponibles en el archivo de su elección.
Fuente a través de archive.org