Script para purgado de logs o archivos temporales

Este es otro de mis pequeños scripts que suelo utilizar y/o adaptar para diferentes circunstancias. Un script sencillo, escrito para Korn Shell pero fácilmente portable a Bash u otro similar.

Para ser ciertos, más que scripting, este ejemplo es una clase de find, un comando tan potente que casi que nos permite “programar” con find 😉

Antes de pasar a ver el código, comento un poco la necesidad que dió origen a este pequeño ejemplar para que tu puedas interpretarlo y, por que no, adaptarlo a tu necesidad.

La cuestión es así, mis aplicaciones y procesos sin logs no tienen razón de ser, todo se loguea, con fines de detectar anomalías, ver errores de software e incluso para hacer auditorias.

El uso excesivo de logs nos lleva a la necesidad de la existencia de una rotación o depuración de los mismos; para esa ocasión, tan solo con un find bien robusto podemos hacer esta purga.

Veamos el ejemplo y analicemos brevemente el código:

MantenimientoLogs.sh:

[CODE]
#!/bin/ksh

Log()
{
date “+%Y/%m/%d %H:%M:%S, $0, $1”
}

echo
Log “*** $0 Init ***”

cfgFile=$1

if test -z “$”; then
Log “No se especifico archivo de configuracion”
Log “Termina!”
exit 1
fi

if test ! -f “$cfgFile”; then
Log “No se encuentra el archivo de configuracion: [$cfgFile]”
Log “Termina!”
exit 3
fi

. $cfgFile # include

Log “Purgo logs ($datePurge dias)”
find $pathLogs \( -name “*.*~” -o -name “*.log” \) -ctime +$datePurge -exec “rm -v {}”

Log “Terminamos!”

[/CODE]

MantenimientoLogs.cfg

[CODE]
# path del directorio de logs
pathLogs=/var/log/myapp/

typeset -i datePurge
# tiempo que mantengo los logs
datePurge=30*3 #tres meses

[/CODE]

El primero de los archivos es el que hace el trabajo, el segundo es solamente de configuración. El primero recibe como argumento el segundo. El único motivo de este desacople es que cuando haya algo de configuración que modificar, se haga en el archivo cfg y no en el script de mantenimiento que es el que tiene la lógica.

En MantenimientoLogs.cfg solo configuro el directorio que quiero purgar, y la cantidad de días que pretendo mantener los logs.

MantenimientoLogs.sh tiene la “lógica”, entre comillas ya que no hay mucho que decir de la misma sino más bien del find. En este script lo primero que vemos es una función Log, que hace de echo pero que agrega la fecha a cada línea. Luego se hace una especie de “include” del archivo de configuración (recibido como parámetro), previo chequeo de la existencia del argumento y la existencia del archivo.  Y luego viene todo el trabajo, que lo hace el find.

El find en el caso del script busca todos los archivos .sql o .*~ cuya fecha de modificación sea más de N días (donde N es $datePurge y $datePurge lo habiamos configurado en el cfg). Y finalizando esta línea, a los resultados del find les ejecuta la acción “rm -v“.

Este script es muy sencillo, no tiene nada de otro mundo, pero fue escrito para una situación muy particular que me surgió. Para mi, con una experiencia en escritura de shell scripts muy pobre, este es un buen inicio y cumplió mi cometido. Para quienes les resulte insuficiente sepan disculpar, algo es algo, al menos no es un Hola Mundo 😉

Tags: , , , , , , ,


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.