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

Re: Rutina en logrotate para Apache2



El Sun, 16 Jan 2011 21:36:47 +0100, Javier Barroso escribió:

> 2011/1/16 Javier Barroso:
>> 2011/1/16 Camaleón:

>>> ***
>>> # 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")

Huys, es verdad, se me fue la "z", ¡gracias!

Lo de los "*log.gz" no hará falta, prefiero mantener los registros 
mensuales sin compresión y comprimir al final del año, esa era mi 
idea inicial. Y en lo del rm -f no había caído, lo añadiré, pero 
el primer año le diré que elimine nada... "por si" :-}

>>> 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"

Hey, eso ya parece otra cosa... mola, muchas gracias :-)

(probado y va de lujo)

He hecho alguna modificación para que 1) el "find" no sea recursivo y no 
afecte a otros subdirectorios con archivos .log y para que 2) el archivador 
no mantenga la información de la ruta (./), a ver qué te parece:

***
function comprimir_logs
 {
 tipo="$1"
 anyo_anterior=$(date +'%Y' -d '1 year ago')
- ficheros=($(find /var/log/apache2 -name "$tipo.$anyo_anterior*.log*"))
+ ficheros=($(find /var/log/apache2 -maxdepth 1 -name "$tipo.$anyo_anterior*.log*" -exec basename {} \;))
 if [ ${#ficheros} -gt 0 ]
   then
      tar -zcf /var/log/apache2/$tipo.$(date +'%F').tar.gz ${ficheros[*]}
      if [ $? -eq 0 ]
      then
        rm -f ${ficheros[*]}
      else
         echo "Algo ha ido mal" |
 	 mail -s "fallo al comprimir $tipo" xxx@yyy
   fi
 fi
 }

 comprimir_logs error
 comprimir_logs access
***

Bueno, creo que al final me habéis convencido con lo del script, mañana 
lo pongo en producción y el año que viene ajustaremos cuentas... si pasa 
algo "gordo" mi alma errante os perseguirá cual ojo de Sauron sobre el Anillo 
Único y si todo va bien os habréis ganado una cerveza/zumo virtual >>;-P )

Saludos,

-- 
Camaleón


Reply to: