Apache2 y logrotate: ¿se necesita delaycompress?

8

Actualmente estoy mirando el tamaño de archivo de mis registros de Apache, ya que se volvieron enormes. En mi configuración de logrotate, he delaycompresshabilitado. ¿Apache realmente necesita esto (como la documentación de logrotate dice que algunos programas todavía escriben en el archivo anterior) o es seguro desactivarlo delaycompress?

Aquí está mi configuración de logrotate:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 26 
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
            if [ -f /var/run/apache2.pid ]; then
                    /etc/init.d/apache2 restart > /dev/null
            fi
    endscript
}
j0nes
fuente

Respuestas:

7

Si está haciendo un reinicio de Apache (o incluso 'agraciado'), cerrará los identificadores de archivos abiertos y los abrirá nuevamente. No debería necesitar delaycompress porque el archivo se habrá cerrado y vuelto a abrir como parte de su reinicio posterior a la rotación.

rotate access_log -> access_log.1 (rename action, no INODE change)
apache still writing to access_log.1 (same open FD on same INODE)
apache restart (close FD, release INODE writing)
apache writing to access_log (new FD to a new INODE)

Reiniciar es una mala idea: ¿qué sucede si el archivo de configuración cambió accidentalmente y ya no es válido? Tu apache no se iniciará de nuevo. En su lugar, envíe un HUP al proceso principal que le indica que cierre / vuelva a abrir los identificadores de archivo.

postrotate
  /bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true
endscript

cat fallará si falta el PID (o está vacío, o no es válido), lo que provocará que falle también, por lo que no necesita el if..thenbloqueo a su alrededor.

Martijn Heemels
fuente
YMMV pero me parece una buena respuesta
asdmin
0

Hrm, en este caso, probablemente, ya que Apache mantiene los registros abiertos.

Una cosa que puedes probar es el rotatelogsscript. Es parte del apache2-utilspaquete, al menos aquí en mi estación de trabajo Ubuntu. Otro enfoque sería rotarlos diariamente en lugar de semanalmente, por lo que está almacenando menos antes de la compresión.

McJeff
fuente
Probablemente debería haber agregado mi configuración de logrotate en la pregunta anterior; como postrotate, configuré un reinicio de apache2.
j0nes