Para poder configurar Logrotate en un servidor Linux/Unix después de generar las estadísticas, si uno de los (tantos) problemas que podemos tener a la hora de gestionar nuestro servidor, es que si no controlamos el tamaño de nuestros ficheros de registros (errores y accesos por ejemplo) de nuestros alojamientos web, puede ser un problema.
Para solucionarlo he creado este tutorial con los pasos a seguir y que a mí me ha funcionado. Como todo en la informática habrá muchas formas y colores para conseguir lo mismo y/o mejorar esta.
Lo importante a tener en cuenta, es que tenemos que hacer esta rotación de registros DESPU͉S de haber generado las estadísticas, ya que sino no nos sirve de nada.
Bueno, vamos al grano:
1-. Instalar el programa logrotate:
apt-get install logrotate
2-. Crear o comprobar que tenemos las carpetas y ficheros necesarios:
mkdir -p /var/lib/logrotate/
touch /var/lib/logrotate/status
mkdir -p /etc/logrotate.d/
3-. Crear el fichero logrotate.conf:
vi /etc/logrotate.conf
Copiar el siguiente contenido el fichero logrotate.conf que antes hemos creado:
# ejecutar «man logrotate» para más información
weekly
rotate 4
create
include /etc/logrotate.d
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
4-. Crear el fichero de rotación (en mi caso para los logs de acceso y errores):
vi /etc/logrotate.d/rotar_logs
Copiar el siguiente contenido en dicho fichero:
/www/*/logs/access_log {
daily
rotate 90
copytruncate
compress
notifempty
missingok
}
/www/*/logs/error_log {
daily
rotate 90
copytruncate
compress
notifempty
missingok
}
La ruta dependerá del servidor donde nos encontramos y el * lo que indica es que en todas las carpetas de dicha ruta las tenga en cuenta. Por ejemplo:
/www/pepito/logs/access_log
/www/juan/logs/access_log
/www/manuel/logs/access_log
/www/pepito/logs/error_log
/www/juan/logs/error_log
/www/manuel/logs/error_log
5-. Comprobar manualmente que funciona:
/usr/sbin/logrotate -d /etc/logrotate.conf
/usr/sbin/logrotate -f /etc/logrotate.conf
Creo recordar que se hace lo mismo con:
/usr/sbin/logrotate -d -f /etc/logrotate.conf
Si todo va bien y no se muestra ningún error es que todo ha ido bien.
6-. Ahora nos toca programar para que el servidor haga logrotate automáticamente, con ayuda de nuestro amigo crontab:
vi /etc/crontab
Copiar el siguiente contenido:
#Logrotate a las 1 AM
0 01 * * * root /usr/sbin/logrotate /etc/logrotate.conf > /dev/null 2>&1
Finalmente ejecutaremos en el terminal:
/etc/init.d/crond restart
Para que los nuevos cambios se apliquen.
La programación del crontab dependerá de cuando generemos nuestras estadísticas, ya que lo tendremos que programar momentos después de generarlas, ya que sino lógicamente no tendrá los registros de acceso correctamente al generarlas.
Si alguien conoce otros métodos o alguna forma de mejorar el mío, que deje un comentario. Espero que ayude a más de uno 🙂
Muy Buen tutorial, algunos crontab no tienen la tarea diaria para ejecutar el logrotate (Me paso con gentoo) por eso siempre es bueno verificar cuando se hace la configuración.
Saludos
Segui las instrucciones, pero al ejecutar el logrotate aparecio este error
/usr/sbin/logrotate -f /etc/logrotate.conf
/tmp/logrotate.2FCKJ5: line 4: /usr/sbin/accton/pacct: Not a directory
error: error running postrotate script
Veo que los archivosdel log no estan llegando al tamaño configurado (900M).
Podrian ayudarme???
Muy buena explicación, solo un pequeño apunte:
La última parte no sería extrictamente necesario hacerla (al menos en distribuciones Ubuntu/Debian), ya que el propio cron, dentro de sus tareas diarias (/etc/cron.daily) , lanza la tarea /usr/sbin/logrotate /etc/logrotate.conf y como bien dices, esto implica rotar todo lo que se haya configurado dentro del directorio /etc/logrotate.d.
No se hasta que punto se podría estar realizando la rotación dos veces al día en lugar de una, en caso de meter la tarea directamente en el crontab, pero bueno, en principio supongo que incluso en ese caso no habría demasiado problema.
Por otro lado, como aprendiz de sysadmin que soy, aconsejo emplear el comando «crontab» (man crontab, es muy sencillo de usar) para añadir las tareas de cron al crontab del usuario que lanzará la tarea, en vez de editar directamente el fichero crontab general. Aunque cualquiera de las dos cosas funciona, por supuesto 🙂
Gracias por el post!