¿Cómo evitar la recarga de Apache al rotar registros?


25

Utilizo logrotate para rotar los registros de acceso, error y reescritura de Apache. Mi archivo de configuración se ve así:

/apache/*log {
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
    lastaction
     /bin/apache reload
    endscript
}

Mi problema es que cada vez que ocurre una rotación, Apache tiene que volver a cargarse porque Apache ya no escribe en el archivo de registro recién girado. ¿Hay alguna manera de evitar la recarga de Apache cada vez que logrotate hace una rotación?

Respuestas:


42

La razón por la que Apache necesita una recarga es que una vez que abre un archivo, obtiene un identificador de archivo y seguirá escribiendo en ese identificador de archivo. Cuando mueve el archivo, no ve eso, simplemente sigue escribiendo en el mismo controlador. Cuando realice una recarga, abrirá el archivo nuevamente y obtendrá un nuevo identificador.

Para evitar la recarga, en lugar de mover el archivo, puede copiarlo y vaciar el archivo anterior. De esa forma, apache puede seguir escribiendo en el mismo identificador de archivo. Para ello, agregue la opción "copytruncate" al archivo de configuración logrotate, de esta manera:

/apache/*log {
    copytruncate
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
}

Gracias por tu respuesta. Entonces, ¿supongo que cuando agrego lastaction echo "" | /apache/*log endscriptel identificador de archivo no está "perdido"?
arpa

3
Lo siento, debería haber dicho "copytruncate" en lugar de "copy". Entonces no necesitas nada de la última acción. Culpo tener demasiada sangre en mi flujo de cafeína :-)
Jenny D

Funciona como un encanto :)
arpa

44
@harp tenga cuidado, el logrotatedocumento dice: "Tenga en cuenta que hay un intervalo de tiempo muy pequeño entre copiar el archivo y truncarlo, por lo que podrían perderse algunos datos de registro".
Totor

Además de la posibilidad de que se pierdan algunos datos, ¿hay alguna otra desventaja conocida para usar copytruncate?
Leo Galleguillos

5

Te recomiendo que uses http://cronolog.org/

Así es como lo uso:

CustomLog     "|/usr/local/sbin/cronolog -S /var/log/httpd/t3.CCC.eu-access_log -P /var/log/httpd/t3.CCC.eu-access_log.prev /var/log/httpd/t3.CCC.eu-%Y.log" combined

1
La conexión a cualquier programa externo puede ser un problema si hay mucho tráfico al servidor web. Pero evita claramente el problema del manejo de archivos.
Jenny D

Parece una buena alternativa. ¿El cronólogo se comprime sobre la marcha?
arpa

Hay aplicaciones similares "rotatelogs" en el paquete apache2-utils. Solo tenga cuidado de no "canalizar" en el mismo archivo de registro desde diferentes servidores virtuales apache: se pisotearán entre sí.
Arie Skliarouk
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.