"2011.4.14 6:15:01","-","192.168.203.5","http://www.otro.com","*DENIED","GET",""
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
El problema es que has creado un bucle sin fin, en donde no indicas en ningún sitio (salvo con usleep()) que el procesador puede tomarse un descanso hasta que haya nuevos datos. En cambio, el procesador está volcado en tu tarea, continuamente.Fernando escribiste:Armé un script en Perl que con la ayuda de uds., que procesa un archivo de LOG (de dansguardian) y va escribiendo en una base de datos. Lo hace en tiempo real. FIFO
Hace lo que quiero que haga. Pero el tema es que tengo permanentemente el micro al 99%.
Bueno, sí, esa es una forma de hacerlo, pero la "marca" que normalmente se usa en registros que van creciendo es ir guardando el tamaño del fichero en ese momento. Ejemplo:Fernando escribiste:Lo estuve investigando un poco y muchos tienen el mismo problema con este tipo de scripts. Entonces, lo que quiero hacer es otro script, que en lugar de pasar la info a la DB en tiempo real, lo haga cada 1 o 2 minutos (proceso en cron).
El tema es que el archivo puede pesar bastante, y yo necesito ir pasando las diferencias, es decir las últimas líneas, con lo cual debería leer una marca (supongamos MARK1 que puede ser una fecha:hora) y pasar a la base de datos desde ahí hasta el final. Luego vuelvo a poner la marca en el final (o guardo algún dato relevante de la última línea), y cuando se vuelva a ejecutar el script se repetiría el proceso.
Pensé en guardar esa marca en la misma base de datos, pero es irrelevante para el problema en cuestión.
Estuve leyendo un poco cómo hacerlo, pero mi duda es cómo puedo hacer para guardar en memoria (o archivo) para trabajar en el pasaje a la base de datos solamente la parte que necesito, y no todo el archivo.
Y otra duda que tengo es cómo almacenar algún dato (MARK1 o fecha:hora) de la última línea leída para utilizar como marca la próxima vez que se ejecute el script. Probé con un while(), pero las variables del while() no me las toma fuera de éste.
Sí, así es, pero, yo, por ejemplo, tengo un proceso así funcionando desde el pasado 25 de febrero; y podía ser más tiempo si no lo hubiera parado manualmente Estando en Linux, no tengo miedo a que pase nada raro.Fernando escribiste:el script va a funcionar perfecto siempre y cuando se mantenga en ejecución. ¿Qué pasaría si genera un error (X, no importa, cualquiera) y el script sale? El/los log seguiría creciendo y al volver a ejecutar el script las líneas pasadas se perderían, ¿no?
Y además, se debería ocupar de arrancarle de nuevo, pasándole como argumento el cálculo de la última línea leída, de tal manera que, antes de entrar en el bucle sin fin, procese las líneas pendientes. Incluso la posición puede ser almacenada por el propio bucle, de tal manera que el programa lanzador/monitor no tiene más preocupación que tenerlo siempre arrancado.Fernando escribiste:Sé que se podría solucionar armando otro script que cuide que el primero esté siempre en ejecución.
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 29 invitados