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: