[SOLUCIONADO]Problemas con el planificador de tareas

Hola, estuve implementando el manejo de tareas mediante la función programar_tarea de la clase toba_planificador_tarea pero no se ejecutan. Se almacena en la base (tabla apex_tarea) la tarea correctamente, hasta probé ejecutándola con la función ejecutar_tarea del planificador y funciona correctamente.
Leí un tema donde se podía llegar a relacionar con la versión de postgresql (link: http://foro.comunidad.siu.edu.ar/index.php?topic=6532.0) pero al no tener problemas con la función ejecutar_tarea descarté que sea este el problema.
Estoy usando la versión 2.4 de toba y 8.4 de postgres.

Alguna sugerencia de que puedo probar?
Desde ya muchas gracias

Saludos

Hola Jorge, bienvenido

segun parece, el problema podria estar entonces en la planificacion de la misma… digamos, que no se ejecuta cuando debe?. Te hago una consulta, se encuentra planificado en el SO el comando toba proyecto ejecutar_tareas ?.. este vendria a ser el dispatcher para la ejecucion de las mismas, sin eso por mas que las programes nunca se despertaria el lanzador.

Leí un tema donde se podía llegar a relacionar con la versión de postgresql (link: [url=http://foro.comunidad.siu.edu.ar/index.php?topic=6532.msg27524]http://foro.comunidad.siu.edu.ar/index.php?topic=6532.0[/url]) pero al no tener problemas con la función ejecutar_tarea descarté que sea este el problema. Estoy usando la versión 2.4 de toba y 8.4 de postgres.

Una cosa que revisaria yo es la siguiente, aunque quizas no tenga relacion directa con este caso. Postgres 9.1+ cambio el metodo de escapado por defecto, toba 2.4 salio tomando eso en cuenta, la version 8.4 no tenia posibilidad de tomar literalmente las "", sino que las considera caracter de escape. Si en algun momento tenes inconvenientes con Expresiones Regulares o el editor, puede deberse a este tema, ya que los metadatos fueron exportados en el formato 9.1+.

Saludos

Buenas Ricardo,
gracias por la respuesta, pero tengo algunas dudas…

se encuentra planificado en el SO el comando toba proyecto ejecutar_tareas?

la verdad nose como configurar el planificador, probé ejecutando en por linea de comandos:

./toba proyecto ejecutar_tareas -p "nombre del proyecto" -i desarrollo

y hubo un error fatal:

Fatal error: toba_planificador_tareas::ejecutar_tarea(): 
The script tried to execute a method or access a property of an incomplete object.
Please ensure that the class definition "tarea_prueba" of the object you are trying 
to operate on was loaded _before_ unserialize() gets called or provide a __autoload() 
function to load the class definition  in /home/toba/proyectos/toba/php/nucleo/lib/toba_planificador_tareas.php on line 144

parece ser un problema al deserializar el objeto, capaz que tiene que ver con la versión de postgresql.

Se ejecuta de esa forma el planificador? que me recomendas que haga?

Saludos

Jorge,

es simplemente poner la ejecucion del comando que tiraste en el cron o el planificador de tareas de windows, para que se ejecute a intervalos regulares.

``` Fatal error: toba_planificador_tareas::ejecutar_tarea(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "tarea_prueba" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /home/toba/proyectos/toba/php/nucleo/lib/toba_planificador_tareas.php on line 144


parece ser un problema al deserializar el objeto, capaz que tiene que ver con la versión de postgresql.</blockquote>

Bien, aca como bien supones tiene incidencia el tema de postgres y me parece que vale la pena intentar lo que Jose describia en este [url=http://foro.comunidad.siu.edu.ar/index.php?topic=6532.msg27439]post[/url]. Claramente esta teniendo inconvenientes al deserializar el objeto, si no modificaron la clase luego de hacer la programacion de la tarea, esto no deberia suceder.. a menos que lo que devuelve postgres no sea lo mismo que se mando a guardar.

Con respecto a si se ejecuta asi el planificador, si... es la manera de lanzar el disparador de tareas, internamente dicho proceso decide que tareas se deben ejecutar y cuales no.. pero vendria a ser el 'daemon'.

Saludos

Richard,

es simplemente poner la ejecución del comando que tiraste en el cron o el planificador de tareas de windows, para que se ejecute a intervalos regulares.

Pero si agrego esa tarea al cron, es como si no utilizaría la clase planificador_tareas, y el método planificar_tarea no tendría sentido. Capaz que estoy errado, pero creía que al utilizar ese método, toba ya se encargaba de realizar el procedimiento de ejecución sin la necesidad de otras configuraciones.
¿Estoy equivocado en mi suposición? ¿Para que me serviría utilizar el método planificar_tarea?

Por otro lado, lo que se plantea en el otro post sobre la versión de postgresql. La versión 8.4 no contiene la propiedad bytea_output, se puede ver en el tutorial de esta versión, donde en ninguna parte la nombra (link: PostgreSQL: Documentation: 8.4: Binary Data Types). En las versiones posteriores se hace mención a esta.
No se si tendrá solución este problema, si directamente tendré que cambiar de versión del postgresql. Lo que si me parece raro que no falle la ejecución de la tarea (por el método ejecutar_tarea de la clase planificador_tareas) desde el código y si desde linea de comando.

Hola Jorge,

son dos cosas separadas, lo que estas colocando como tarea en el cron, es la instanciacion del dispatcher. Cosa que toba no puede hacer automaticamente durante la instalacion por una cuestion de permisos (como asi tampoco se agrega toba.conf a la config de apache). Ubicando esa sola linea podes planificar todas las tareas que necesites, las que se iran ejecutando a medida que sea necesario, digamos… sin eso, seria como planificar una tarea en windows y pararle el servicio que las lanza (que valga la redundancia se llama planificador de tareas).

En gral los SO tiene los daemons para estas tareas, PHP no corre como daemon… asi que la unica manera seria tener un daemon propio, o depender del que viene en el SO. Se eligio esta ultima estrategia, que es mas portable y no requiere la instalacion de una capa extra, como podria ser mantener un jar corriendo en segundo plano o un servidor de aplicacion. En cualquiera de ambos casos, se debe instanciar el ‘daemon’, que es justamente para lo que agregarias la linea al cron.

Lo que si me parece raro que no falle la ejecución de la tarea (por el método [b]ejecutar_tarea[/b] de la clase [b]planificador_tareas[/b]) desde el código y si desde linea de comando.
Este es un punto y a mi tambien me llama la atencion, sobre todo porque se utiliza el mismo metodo para la ejecucion desde la consola. Por lo cual volvi a leer el msg de error que te entrego PHP y me parece que hay un detalle que se nos escapo antes:
Please ensure that the class definition "tarea_prueba" of the object you are trying 
to operate on was loaded _before_ unserialize() gets called or provide a __autoload()

Te hago una consulta, la clase perteneciente a la tarea en cuestion, esta registrada en el autoload del proyecto?, si no es asi… podrias agregarla y probar si continua fallando?.

Saludos

Richard,

la clase perteneciente a la tarea en cuestion, esta registrada en el autoload del proyecto?

ese era el problema, al agregar el archivo php sin el editor toba no estaba la clase registrada en el proyecto.

Pude resolver el problema y quedo funcionando el planificador de tareas.

Te agradezco la ayuda y la paciencia para explicar.
Saludos!

Hola Jorge,

buenisimo que le encontramos la vuelta. Me alegro que te haya quedado funcionando.

Saludos