sábado, 10 de octubre de 2009

Creando un log

Debido a que nuestro shell script "charging" se ejecuta al ser llamado por nuestro awk "lee_conf.awk", este será ejecutado y cerrado tantas veces como políticas correctas existan en el fichero de configuración. Esto supone un problema, ya que deberemos guardar datos de ejecuciones anteriores, para las nuevas ejecuciones de nuestro shell script. Actualmente el dato que necesitamos guardar es el espacio libre en cache después de cachear los diferentes archivos, una forma guardar este valor es hacerlo en un fichero. Ya que tenemos que generar este fichero de texto con este dato, es una buena opción aprovecharlo para hacer un log de la ejecución de nuestro programa, así que a parte de escribir y leer datos en él para su posterior uso, introduciremos datos que resultarán útiles de cara al usuario final.
Los datos que inicialmente hemos decidido introducir son:
Espacio libre inicial en cache (Lo usaremos en nuestro script).
Número de política aplicada.
Ficheros cacheados en cada politica.
Total tamaño de ficheros cacheados para cada política.
Espacio libre en cache después de cachear todos los ficheros de todas las políticas aplicadas.

Añadiendo Loglevel

Hemos añadido a nuestro shell script "charging" una variable llamado loglevel. Esta variable podrá tener valores del 1 al 4, donde 1 representará un bajo nivel de loglevel, y el 4 el mas alto nivel de loglevel.

El loglevel nos servirá para especificar el nivel de salidas por pantalla queremos en nuestro programa, es decir especificando un 4, en la salida por pantalla de nuestro programa mostrará todos los mensajes del programa y que esta haciendo en todo momento, en cambio si especificamos un 1, nuestro programa mostrará el mínimo de mensajes por pantalla mientras se ejecute, y solo mostrará los eventos mas importantes, como cuando se haya ocupado el tamaño máximo de cache y no se pueda seguir cacheando. Para realizar esto hemos añadido condicionales a cada uno de los "printf" y "echo" que salian por pantalla, y dependiendo el grado de importancia que creemos que tienen se ejecutarán si su loglevel cumple la condición de ser igual o mas grande que el loglevel especificado en la variable inicial.

Fallo en crontab

Tal y como comentábamos en el anterior post, la tarea crontab no se ejecutaba de forma correcta, después de hacer diferentes búsquedas, comprobar variables de entorno, etc, creamos un log con la ejecucion de la tarea desde crontab, y nos muestra donde estaba nuestro error, la instrucción que llama a nuestro shell script dentro del código de awk no tenia el path especificado, y no encontraba el fichero, con esto solucionado la tarea se ejecuta correctamente.

Ahora nos faltará solucionar otro problema, en caso que el usuario desee introducir algún asterisco en alguno de los cinco parámetros del momento de ejecución de la tarea, nuestro script no entiende el asterisco como un literal, sino como una expresión regular, una posible solución seria comprobar si los parámetros son asteriscos y modificarlos por rangos 0-59, etc.

Aparcamos este problema de momento, ya que creemos que esa solución deberia funcionar, y lo retomaremos en su momento.

martes, 6 de octubre de 2009

Modificaciones en fichero de configuración(3) Asignando periocidad a crontab

También vamos a modificar nuestro fichero de configuración para que el usuario pueda asignar la tarea de ejecutar nuestro programa con la periocidad que el elija.

Utilizamos la misma nomenclatura que crontab.

crontab=* * * * *

Lo leemos con nuestro fichero lee_conf.awk y asignamos a las variables correspondientes.

Actualmente no tenemos esta parte funcionando correctamente, ya que tenemos un problema a la hora de ejecutar el programa awk con crontab, estamos consultando en los foros en busca del posible problema y solución.

Una vez solucionado nuestro programa realizará correctamente la tarea programada, y solo nos faltará depurar un poco mas nuestro fichero de configuración y el programa para su lectura.

Modificaciones en fichero de configuración(2) Asignado tamaño de la cache

De nuevo vamos a realizar modificaciones en nuestro fichero de configuración, esta vez el usuario podrá especificar en tal fichero si desea asignar un tamaño fijo de cache en vez de usar el espacio libre en disco.
Encontraremos una entrada del estilo: cache_size=1000M
El usuario debera especificar un número y una unidad de tamaño, nuestro programa de lectura de configuración encontrará esta entrada y trabajara con ella para enviar los datos necesarios a nuestro script "charging" que será el que se dedique a realizar todas las acciones necesarias para el caching.

Debido a estas modificaciones, hemos tenido que adecuar nuestro programa de caching "charging" para que contemplará la comentada doble posibilidad, que el tamaño de la cache fuera la asignada por el usuario o que sea el espacio en libre en disco. Nuestro script comprobará si el fichero de lectura de configuración le pasa las variables correspondientes al tamaño de la cache, en caso de que no se pasen trabajará con el tamaño libre en disco