Cómo registrar correctamente los registros de servicio administrados por systemd a través de `file:` config

Aug 19 2020

Tengo un servicio administrado por systemd que tiene la siguiente configuración de systemd que le dice a systemd que escriba los registros en un archivo directamente (sin syslog ni nada)

StandardOutput=file:/var/log/foo/my.log

Tengo una regla de logrotate

/var/log/foo/*.log
{
        rotate 31
        daily
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
}

Lo que sucede es que los registros se están rotando, pero el servicio todavía está escribiendo en el antiguo archivo rotado y el nuevo archivo de registro permanece vacío.

Tengo una configuración de trabajo similar en la que el servicio escribe en syslog. Ese funciona bien porque la configuración de logrotate tiene

postrotate
                invoke-rc.d rsyslog rotate > /dev/null

, que notifica a syslog que su registro se ha rotado.

El problema es que, en mi caso problemático, el registro va directamente al archivo, por lo que no sé si (o cuál) necesito enviar una señal similar a systemd o al proceso de servicio real.

Encontré la copytruncateopción en logrotate, que estoy bastante seguro de que solucionará mi problema, pero tengo la sensación de que esta no es la forma ideal de hacerlo, de lo contrario copytruncatesería el comportamiento predeterminado de logrotate.

¿Cómo soluciono este problema? ¿Necesito enviar alguna señal a systemd? ¿Necesito enviar alguna señal al proceso de servicio? ¿tengo que usar copytruncateen logrotate en su lugar?
Si importa, el servicio es un proceso java que usa logback para escribir en stdout

Respuestas

eleventyone Aug 18 2020 at 22:32

copytruncatees la respuesta correcta en este caso. No es el predeterminado porque es menos común necesitarlo, porque tendría un demonio adecuado al que puede indicar que vuelva a abrir el archivo de registro.

La alternativa es reiniciar el servicio en el script posterior a la rotación, pero eso puede no ser conveniente o deseable.