Hace unas semanas expliqué como usar logrotate para tener un buen sistema de rotado de logs. No obstante, no comenté la posibilidad de rotar los logs según su tamaño o fecha.
Pongamos el caso de que queremos rotar un determinado log de apache, en el momento que llegue a los 150Mb, para ello, iriamos a nuestro fichero de configuración para el logrotate de apache (/etc/logrotate.d/apache por ejemplo):
/usr/local/apache/logs/access_log { compress maxage 360 size=+150M create 644 root root postrotate /etc/init.d/apache2 reload endscript }
Como habréis comprobado, para asignarle un tamaño máximo de 150 Mb, añadimos size=tamaño_máximo, podemos indicar el tamaño en k o M sin problemas. Por otra parte, podemos especificar que se eliminen los ficheros de logs almacenados si superan un determinado tiempo de vida, en este caso 360 días, con el parámetro maxage.
Iremos desvelando más parámetros de logrotate…
¿como deberia ser para que no se piedan las estadisticas de awast… o no se pieden asi?
Carlos, normalmente los sistemas de estadísticas guardan sus datos fuera de los logs de apache, me explico.
Primero recolectan los datos de los logs de apache, los procesan y los guardan en sus sistemas de estadísticas, por lo que no deberías tener problema.
No obstante, para evitar perder datos cuando haces el logrotate, puedes meter, dentro de la configuración de rotación de logs de apache algo similar a lo siguiente:
prerotate
/usr/lib/cgi-bin/awstats.pl -config=????.??? -update
endscript
Así, procesarás las estadísticas y justo después rotarás los logs.
un saludo-
Muy buen script y explicación.
Alex, se entiende lo que explicas, ahora la sentencia para generar las estadisticas antes de rotar los logs, lo agregas al scrip primero de todo?
Ejemplo quedaría asi:
prerotate
/usr/lib/cgi-bin/awstats.pl -config=????.??? -update
endscript
/usr/local/apache/logs/access_log {
compress
maxage 360
size=+150M
create 644 root root
postrotate
/etc/init.d/apache2 reload
endscript
}
Esta bien esto?
Saludos
Hola Mauro,
El prerotate va dentro de las llaves:
/usr/local/apache/logs/access_log {
prerotate
/usr/lib/cgi-bin/awstats.pl -config=????.??? -update
endscript
compress
maxage 360
size=+150M
create 644 root root
postrotate
/etc/init.d/apache2 reload
endscript
}
Saludos!
Gracias alex, ya lo tengo configurado asi mismo.
Saludos
La unica modificacion que realice es la siguiente:
En lugar de:
/etc/init.d/apache2 reload
Coloque esta linea:
/usr/sbin/apachectl graceful
Es correcto???, ya que lo definido en el script original no estaba fisicamente en nuestro server.
Atte.-
Al hacer un graceful la diferencia es que no mata las conexiones activas, mientras que restart sí. Respecto a reload en principio solamente debería volver a leer los ficheros de configuración.
Asegurate que apachectl se encuentra en esa ubicación.
Saludos