[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Rutina en logrotate para Apache2



2011/1/16 Javier Barroso <javibarroso@gmail.com>:
> 2011/1/16 Camaleón <noelamac@gmail.com>:
>> El Sun, 16 Jan 2011 14:11:05 +0100, fernando sainz escribió:
>>
>>> El día 16 de enero de 2011 13:23, Camaleón escribió:
>>>> El Sun, 16 Jan 2011 01:21:47 +0100, Javier Barroso escribió:
>>
>> (...)
>>
>>>>> Cuéntanos si consigues hacer exactamente lo que quieres sólo con
>>>>> logrotate, yo creo que más bien me haría un cutre-script ... sobre
>>>>> todo para comprimir todos los logs del año en un fichero .. quizás
>>>>> como han comentado por aquí usando el postrotate (comprobar que no
>>>>> exista un fichero comprimido de ese año y luego generarlo)
>>>>
>>>> Sí, eso es lo que estaba pensando, tal y como comentaba Fernando, que
>>>> tendría que tirar de algún script que se encargara de esto, pero tengo
>>>> que mirarlo con calma porque el "postrotate" se ejecuta tras cada
>>>> rotación (en mi caso, cada mes) pero sólo debería ejecutar la
>>>> compresión de los archivos tras 12 rotaciones (que sería 1 año) y no sé
>>>> bien cómo obtener esa variable (hum, ¿podría usar un "if rotate > 12
>>>> then gzip"?) O:-).
>>>>
>>>>> Saludos
>>>>> [1] http://httpd.apache.org/docs/2.0/programs/rotatelogs.html
>>>>
>>>> Saludos y gracias a los dos por las sugerencias.
>>>>
>>>>
>>> No se exactamente que quieres hacer, pero contar ficheros es fácil. ls
>>> /dir | wc -l
>>
>> Je, pues sí, no se me había ocurrido. A ver qué os parece esta "cosa" que
>> he preparado (ojo, que no está probado directamente con el logrotate, sólo
>> he hecho una prueba "a capela", ejecutando el script directamente sobre un
>> directorio con archivos pre-creados):
>>
>> ***
>> # 20110116 archive old access logs on a per year basis
>> if [ `ls access.*.log | wc -l` -gt 12 ]; then
>>    tar -cf access.$(date '+%F').tar.gz access.$(date '+%Y' --date='1 year ago')*.log
>>    # let's check how it works before deleting
>>    # rm access.$(date '+%Y' --date='1 year ago')*.log
>> fi
>> ***
>
> Te falta el z en el tar y seguramente ajustar el script para que te
> pille los *log.gz ..., y luego el -f en el rm (es bueno que en los
> servidores rm sea un alias a "rm -i")
>
>
>>
>> La idea es que el primero de enero de cada año, al ejecutarse la rutina del
>> logrotate, el script detecte que ya hay 12 archivos access.*.log y genere el
>> archivador con los registros del año pasado.
>>
>> A mí me parece un poco "cutrecillo" pero creo que funcionaría salvo que se
>> me haya pasado algo por alto y no me dé cuenta hasta el año que viene O:-)
>>
>> Si se os ocurre alguna idea o mejora (por ejemplo, cómo añadir
>> "elegantemente" en el mismo script los archivos "error.*.log", más allá de
>> copiar/pegar el mismo bloque y cambiando el nombre :-P), avisad.
> A mi se me ocurre mejor que comprimir si hay 12 ficheros, mirar a ver
> si hay ficheros del año anterior y comprimirlos si los hay.
>
> Mi propuesta con bash (puedes coger la idea del tipo para ajustar tu
> función sin tener que copiar / pegar :) ):
>
> function comprimir_logs
>  {
>  tipo="$1"
>  anyo_anterior=$(date +'%Y' -d '1 year ago')
>  ficheros=($(find /var/log/apache2 -name "$tipo.$anyo_anterior*.log*"))
>  if [ ${#ficheros} -gt 0 ]
>  then
>     tar -zcf /var/log/apache2/$tipo.$(date +'%F').tar.gz ${ficheros[*]}
>     if [ $? -eq 0 ]
>     then
>         rm -f ${ficheros[*]
                                   ^}^

# había ese pequeño "tipo"

Saludos


Reply to: