pseudo-cron en php

86 views
Skip to first unread message

Javier Aroche

unread,
Oct 1, 2006, 9:11:48 PM10/1/06
to PHPGT
Saludos gente!

Hace unos días que ando buscando una forma de poder simular cron jobs via php, es decir, ejecutar un x script cada cierto tiempo todo desde scripts php. Hasta ahora mi mejor opción es esta: pseudo-cron 1.3. No la he probado ya en el terreno de accion, pero es facil de usar, solo necesita que se configure un archivo similar al que usaría un el cron e incluir el script en una página muy visitada. Lo único que no me parece es que utilize un archivo para configurar las tareas y tiempos.... así que por eso les escribo, para saber si alguno de ustedes a usado un script similar, pero que use la db para la configuración. Si no me tocará hacerle sus retoques....

Gracias.

--
Javier Aroche
http://jaroche.wordpress.com
De trolleada en Trolleada se hace algo bueno :P

s...@strgt.cjb.net

unread,
Oct 4, 2006, 9:29:56 AM10/4/06
to PHPGT Grupo de PHPeros de Guatemala
No entiendo porqué no lo configurás directamene en tu cron? Tu server
es GNU/Linux? podés crear tu cron desde cualquier usuario

Javier Aroche

unread,
Oct 4, 2006, 10:21:36 AM10/4/06
to ph...@googlegroups.com
Si claro, se puede hacer así, pero como yo no soy el dueño del hosting y aunque puedo pedir que me activen el cron job sin problemas... me gusta más probar la idea. Si lo tenés en php, lo podrías configurar desde la db que desde una archivo usando ssh. Más que todo es por experimentar y que cuando quiera modificar la configuración del job sea desde un script php.

On 10/4/06, s...@strgt.cjb.net <s...@strgt.cjb.net> wrote:

No entiendo porqué no lo configurás directamene en tu cron? Tu server
es GNU/Linux?  podés crear tu cron desde cualquier usuario





Stuardo Rodríguez

unread,
Oct 4, 2006, 12:13:02 PM10/4/06
to ph...@googlegroups.com
Javier Aroche escribió:

> Si claro, se puede hacer así, pero como yo no soy el dueño del hosting
> y aunque puedo pedir que me activen el cron job sin problemas... me
> gusta más probar la idea. Si lo tenés en php, lo podrías configurar
> desde la db que desde una archivo usando ssh. Más que todo es por
> experimentar y que cuando quiera modificar la configuración del job
> sea desde un script php.
El problema que yo veo con el php-cron es que dependes que este se
active cada vez que alguien mire una pagina X. El cron es un programita
en el server que corre todo el tiempo y verifica que acciones realiza
cada cierta hora... el solito esta corriendo todo el tiemo, sin
depender de nadie.... la solucion con PHP es que cada vez que alguien
mira una pagina X, se activa el php-cron y verifica si en ese momento
tiene programada realizar alguna accion, en caso contrario, no hace nada,

Esto te da 2 problemas:

1) la pagina que activa este trigger, se alenta
2) si la pagina que activa el trigger no es visitada con frecuencia
(minimo una vez por minuto) tu cron puede no correrse a tiempo

Desde PHP podrias editar el cron-table para el usuario de apache con
system() o exec() por si no tenes acceso directo al cron.

Javier Aroche

unread,
Oct 4, 2006, 12:34:50 PM10/4/06
to ph...@googlegroups.com
Creo que no lo había mencionado antes, pero esta idea es para usarla con el Directorio de Blogs que estoy programando... aka BlogsChapines. Lo que quiero correr con el "cron php" es el script que verifica si hay nuevos posts en n feeds registrados en la tabla. Muchos hostings no ofrecen acceso a los crons o el usuario no sabe usarlos... y como el proyecto lo pueden descargar desde SF, sería mucho mejor que todo se maneje via php, si que tengas que meterte a ondas de "bajo nivel" para la mara que baje el proyecto desde SF.

Solucion a los problemas:
1) Se puede hacer el include el trigger al final cuando ya todo el contenido fue enviado al cliente... y además por eso pregunté por un pseudo cron mejorcito que el que he encontrado que utiliza un archivo para procesar la tabla de trabajos.
2) En mi caso, tengo un script php que tiene visitas por montón (es un script que genera una imagen dinámica) y no tengo problema con que el  job se ejecute 5 minutos fuera de su tiempo.

Yo no tengo mayores problemas con usar la funcion system, pero mi punto es que como es un proyecto libre, habrá mara para la cual configurar el cron job, será meterse al jardín de los cuentazos con su hosting.... o ni siquiera pueden llamar a la función system o algún otro problema por no tener un hosting decente.

Gracias por los comentarios


Mario Soto

unread,
Oct 16, 2006, 10:51:20 AM10/16/06
to ph...@googlegroups.com
Subject: Re: pseudo-cron en php


> Solucion a los problemas:
> 1) Se puede hacer el include el trigger al final cuando ya todo el
> contenido fue enviado al cliente... y además por
> eso pregunté por un pseudo cron mejorcito que el que he encontrado que
> utiliza un archivo para procesar la tabla de
> trabajos.

Esto te genera otro problema. ¿Qué pasa si el usuario decide no cargar la
página por completo y sólo la inicia pero se arrepiente y le da al botón
back o a cualquier otra opción. Hay una opción en php (de la cual no me
recuerdo en este momento) la cual se llama algo así como ignore_user_abort,
obvio para que sirve en este caso, y tenés que tener en cuenta eso para
utilizar el cron. Otra cosa que tenés que tomar en cuenta es el tiempo en
que tarda en ejecutar tu script, porque si tenés un máximo de 30 segundos y
por alguna razón tu script toma 29, para el cron te queda 1 segundo. Tampoco
podés ponerle tiempo 0 porque puede en algún punto crear un ciclo infinito
(nunca falla la ley de Murphy) y es mejor que antes de hacer el include y la
llamada a el cron, le agregues un tiempo extra de ejecución, que si al final
no manda nada, pues ya esta cargada la página y el cron se ejecuta.

Javier Aroche

unread,
Oct 16, 2006, 11:02:46 AM10/16/06
to ph...@googlegroups.com
On 10/16/06, Mario Soto <can...@gmail.com> wrote:
Esto te genera otro problema. ¿Qué pasa si el usuario decide no cargar la
página por completo y sólo la inicia pero se arrepiente y le da al botón
back o a cualquier otra opción. Hay una opción en php (de la cual no me
recuerdo en este momento) la cual se llama algo así como ignore_user_abort,
obvio para que sirve en este caso, y tenés que tener en cuenta eso para
utilizar el cron. Otra cosa que tenés que tomar en cuenta es el tiempo en
que tarda en ejecutar tu script, porque si tenés un máximo de 30 segundos y
por alguna razón tu script toma 29, para el cron te queda 1 segundo. Tampoco
podés ponerle tiempo 0 porque puede en algún punto crear un ciclo infinito
(nunca falla la ley de Murphy) y es mejor que antes de hacer el include y la
llamada a el cron, le agregues un tiempo extra de ejecución, que si al final
no manda nada, pues ya esta cargada la página y el cron se ejecuta.


Pero como se supone que va estar en un script bastante popular, no creo que todas las visitas cancelen la visita antes de que se termine de enviar la página... bueno solo que tuviera una intro flash si te creo jijijiji.

Con lo del tiempo lo tengo en unos razonables 120segundos ya que leer feeds de otros servers no es la cosa más rapida del mundo.

Saludos.
Reply all
Reply to author
Forward
0 new messages