Logrotate no elimina registros antiguos

14

por alguna razón, los archivos de registro anteriores no se eliminan. Ejemplo con apache

Lo que dice el archivo conf:

$ cat /etc/logrotate.d/apache2
/var/log/apache2/*.log {
    weekly
    missingok
    rotate 2
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
            /etc/init.d/apache2 reload > /dev/null
    endscript
}

El contenido (recortado) de la carpeta de registro:

# ls /var/log/apache2/
access.log       error.log.26.gz                other_vhosts_access.log.20.gz  access-ssl.log.14.gz
access.log.1     error.log.27.gz                other_vhosts_access.log.21.gz  access-ssl.log.15.gz
access.log.2.gz  error.log.28.gz                other_vhosts_access.log.22.gz  access-ssl.log.16.gz
access.log.3.gz  error.log.2.gz                 other_vhosts_access.log.23.gz  access-ssl.log.17.gz
[...]

En realidad hay muchos de ellos:

# ls /var/log/apache2/ | wc -l
85

El comando logrotate con --verbose me da esto:

# /usr/sbin/logrotate --verbose  /etc/logrotate.conf
[...]
reading config file apache2
reading config info for /var/log/apache2/*.log
[...]
rotating pattern: /var/log/apache2/*.log  weekly (2 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/apache2/access.log
  log does not need rotating
considering log /var/log/apache2/error.log
  log does not need rotating
considering log /var/log/apache2/other_vhosts_access.log
  log does not need rotating
considering log /var/log/apache2/pbpdhg-ssl.log
  log does not need rotating
not running postrotate script, since no logs were rotated
[...]

Que esta mal aquí ? Los registros se giran pero no se eliminan? ¿Qué me estoy perdiendo?

SamK
fuente

Respuestas:

17

su configuración dice: rotar 2

eso significa que los archivos de registro se rotan 2 veces antes de eliminarse, por lo que logrotate solo se preocupa por 2 archivos.

Supongo que la configuración se cambió en algún momento, porque anteriormente se guardaban más archivos de registro, tal vez fue algo así como rotar 28. Estos archivos más antiguos se deben eliminar manualmente.

johnshen64
fuente
No puedo probar la respuesta, así que supongo que es correcto. Sin embargo, no entiendo por qué access.log.3.gztodavía está presente.
SamK
2
Porque rotate 2 solo maneja 2 archivos, es decir, .1.gz y .2.gz, e ignora otros archivos.
johnshen64
1
He cambiado rotate 365 para rotar 90, y access.log.90.gz es el último cambio hasta ahora. Se ha eliminado el acceso.log.91.gz (ya que logrotate mantiene solo 90), pero no el> 91. Entonces johnshen64 es correcto, debe eliminar todo> 2.
Yvan
Aquí hay un consejo sobre cómo lidiar con esto automáticamente, es decir, a través de la administración de configuración en muchos servidores: serverfault.com/a/636883/9082
Martijn Heemels
-3

Los registros con sufijo .gz no se consideran porque especificó: /var/log/apache2/*.log

Así que 2 .log y todos los archivos .gz permanecen.

Para cambiar esto ponlo ahí

/ var / log / apache2 / ** log * o alguna expresión regular.

Neg88
fuente
Lo siento, solo un asterisco antes del registro
Neg88
2
Para el problema del asterisco, puede editar su publicación. En general, ¿por qué crees que la respuesta aceptada es incorrecta? logrotate quiere los archivos de nombre base y se ocupa de las adiciones .gz según sea necesario.
Ley29
Esta respuesta es realmente dañina ya que existe el riesgo de que los archivos se roten una y otra vez, al menos con algunas versiones de logrotate. Comprimirá los archivos primero, luego coincidirá con los archivos comprimidos y seguirá rotándolos.
Richlv