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

Re: Rutina en logrotate para Apache2



2011/1/16 Camaleón <noelamac@gmail.com>:
> 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 {} \;))
Mejor que usar -exec basename .. , yo usaría -printf "%P\n" (a efectos
prácticos, evidentemente no notarás nada :) )

Y si le quitas la ruta, en el tar te faltaría un -C /var/log/apache2
antes del -zcf (lo del hacer cd dentro de un script no me gusta mucho,
aunque a veces no queda más remedio)


>  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 )
Igual sacan alguna página con la que te puedas tomar una cerveza o un
vino virtual y se forran , ideas así han echo ricos a más gente de la
que se piensa ...

Saludos


Reply to: