2011/1/16 Camaleón <noela...@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 -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/AANLkTin63VRzmLLucGBiZHbEj=q-gdqzk7cexrbvf...@mail.gmail.com