¿Cómo puedo configurar logrotate para rotar registros cada hora?

23

Según el Manual de Administración de la Unix y Linux y man, logrotate tiene opciones para daily, weeklyy monthly, pero hay una manera de añadir una hourlyopción?

Esta publicación de blog menciona que puede establecer size 1y eliminar la opción de tiempo (por ejemplo:) dailyy luego llamar manualmente logrotatecon cron- Supongo que algo así como

logrotate -f /etc/logrotate.d/my-hourly-file

¿Pero hay una solución más elegante para rotar los registros por hora?

cwd
fuente
Seguro. ¿Cuál es su sistema operativo, qué versión?
Nils
ubuntu 10.04 y 11
cwd

Respuestas:

20

Dependiendo de su sistema operativo. Algunas (¿todas?) Las distribuciones de Linux tienen un directorio /etc/cron.hourlydonde puede colocar trabajos cron para que se ejecuten cada hora.

Otros tienen un directorio /etc/cron.d/. Allí puede colocar trabajos cron que se ejecutarán como cualquier usuario especial con la configuración cron habitual de una entrada crontab (y debe especificar el nombre de usuario).

Si utiliza cualquiera de estos en lugar del script de rotación de registro estándar /etc/cron.daily/, debe copiar ese script allí y cp /dev/nullen la posición original. De lo contrario, se reactivará mediante una actualización de parche logrotate.

Para una correcta rotación por hora, también tenga cuidado de que la dateextdirectiva no esté establecida. Si es así, de manera predeterminada, el primer archivo girado obtendrá la extensión de la fecha actual como AAAAMMDD. Luego, la segunda vez que logrotate se active dentro del mismo día, simplemente omite la rotación incluso si el sizeumbral ha excedido.

La razón es que el nuevo nombre del archivo a rotar ya existe y logrotate no agrega el contenido al archivo antiguo existente. Por ejemplo, en RHEL y CentOS, la dateextdirectiva se proporciona por defecto en /etc/logrotate.conf. Después de eliminar o comentar esa línea, los archivos rotados simplemente obtendrán un número en ejecución como extensión hasta alcanzar el rotatevalor. De esta manera, es posible realizar múltiples rotaciones al día.

Nils
fuente
5

Solo para agregar a la respuesta Nils, si cambia la ubicación del logrotatescript en un cuadro de Debian o Ubuntu, probablemente sea más seguro usarlo en dpkg-divertlugar de simplemente copiar el archivo y copiarlo /dev/nulla la posición original, por ejemplo:

dpkg-divert --add --rename --divert /etc/cron.hourly/logrotate /etc/cron.daily/logrotate
boltronics
fuente
No sabía sobre esto y he estado usando Ubuntu durante años. Gracias. :)
Vaughany
2

Otra opción sería agregar el comando logrotate en la lista crontab. Luego se ejecutará por cada hora.

crontab -e

agregue la línea de abajo en la lista de crontab

0 * * * * /usr/sbin/logrotate /etc/logrotate.d/my-hourly-file
Wasantha Herath
fuente