No he encontrado una solución para purgar registros antiguos de tomcat o jboss o cualquier otro registro con marca de tiempo: catalog.log. /servidor.log. . Básicamente, jboss rota estos registros como: server.log, server.log.20131201, server.log.20131203 y así sucesivamente.
¿Hay alguna manera de que pueda usar logrotate para eliminar registros de más de n días? No quiero usar find inside postrotate o modificar las propiedades de registro de jboss/tomcat. Solo quiero saber si logrotate realmente puede lograr esto por sí solo. Sé que no es muy productivo, pero tengo un problema en el que necesito una respuesta.
Si no quieres usar find inside postrotate , no, no puedes.
logrotate trata cada instancia de server.log rotada por Tomcat/JBoss como un archivo diferente y, dado que son únicas, logrotate las rotará solo una vez. maxage , la directiva que elimina los registros rotados con más de n días de antigüedad, solo se verifica si el archivo de registro debe rotarse, por lo que maxage solo se ejecuta una vez y no puede realizar un seguimiento de la antigüedad del archivo.
Sin embargo, si cambia de opinión sobre el uso de find , logrotate puede ayudarlo a simplificar la administración de los archivos de registro creados por Tomcat y JBoss. Lo uso para comprimir y eliminar archivos antiguos con un archivo de configuración como este:
/path/to/logs/server.log.????-??-?? { compress compresscmd /usr/bin/bzip2 nocreate nodateext ifempty missingok rotate 1 size 0 start 0 lastaction # Remove rotated files older than 180 days find /path/to/logs -name 'server.log.????-??-??.0.bz2' -mtime +180 -exec rm {} \; endscript }donde:
rotate 1 y compress renombrar y comprimir, digamos, server.log.20131201 a server.log.20131201.0.bz2 . El 0 entre la marca de tiempo y la extensión .bz2 proviene del start 0 .size 0 se asegura de que los archivos siempre se renombran y comprimen.lastaction elimina los archivos rotados con más de 180 días.logrotate puede administrar sus registros girándolos y eventualmente manteniendo un número limitado de registros rotados. Pero AFAIK solo puede hacerlo para los registros que administra directamente. Si sus registros ya fueron rotados por algún otro agente (es decir, el mismo Tomcat), logrotate no puede hacer nada, simplemente porque no sabe nada sobre la rotación realizada por otra persona.
Entonces, la respuesta es no, no puede usar logrotate para eliminar registros que no administra por sí mismo (y creo que ni siquiera tiene la intención de hacer algo así).
Puede poner el script en /etc/cron.daily. Por ejemplo:
gato /etc/cron.daily/tomcat-rotate-logs
#!/bin/sh # erasing tomcat logs older then 7 days for x in $(find /var/log/tomcat/ -type f -mtime +7); do rm "$x"; logger -t TOMCAT-ROTATE-LOGS "Erasing $x [done]"; doneo crea una configuración logrotate. Por ejemplo: gato /etc/logrotate.d/tomcat
/var/log/tomcat/*.log { su tomcat tomcat copytruncate daily rotate 6 compress missingok }"su tomcat tomcat": significa evitar el error logrotate en permisos incorrectos