Automatizar Función PHP en el tiempo.

KoRMuZ

Buenas chavales.

Estoy liado con un proyectillo web y me gustaría saber si se puede automatizar una función cada X tiempo. He leido que es con el CRON Tab si el server es UNIX, pero siendo uno de 1and1 no se si podré toquetear eso.

Hay alguna forma de hacerlo que no sea esa?

Gracias :)

kraneok

Pero que quieres que realice?

KoRMuZ

Unas comprobaciones en la web y una inserción en una base de datos.

kraneok

Y por que no ejecutas con ajax la funcion php cada vez que alguien realice X acción?

KoRMuZ

Es lo que estoy haciendo ahora, pero lo que necesito es que se haga cada X tiempo.

kraneok

Utiliza setTimeOut();

1 1 respuesta
elkaoD

#6 supongo que cada X tiempo aunque no haya gente dentro...

En efecto necesitas acceder a cron y esto solo lo ofrecen los VPS y dedicados.

1 respuesta
KoRMuZ

Exactamente es eso #7. No hay ninguna forma entonces?

RaymaN

Si solo es un script puedes usar esta que es gratis: https://scheduler.codeeffects.com

Yo la llevo usando un año y funciona perfectamente, nunca ha fallado. Si necesitas ejecutar varios y no quieres gastarte mucho puedes pillar un VPS de aquí: http://www.lowendbox.com/blog/vpscheap-net-18year-128mb-openvz-vps-in-chicago/#more-2734

1 respuesta
KoRMuZ

Es una sola función, grande, pero una sola la que quiero ejecutar #9

HaxeR

Si no tienes dinero para permitirte un servidor dedicado o vps, siempre puedes optar por la opcion sucia :) . Montate tu propio servidor web con algun linux, creas un script que haga una solucitud a tu pagina (al archivo que ejecute las labores que necesites), programas tu script para que cron lo ejecute cuando lo necesites y ya esta.

Lo ideal seria programarlo en el propio cron del servidor que aloja la web, pero en crisis cualquier medida barata es bienvenida.

1 respuesta
Tunnecino

Si tu shared hosting tiene cPanel casi con total seguridad tendrás la capacidad de ejecutar cronjobs.

1 1 respuesta
KoRMuZ

Es el WebDesk de 1and1. Creo que no es CPanel. #12

1 respuesta
Metaza

Eso pasa por usar la mierda de 1and1.

Hay webs que ofrecen ejecutar cronjobs por ti (A partir de cierta cantidad $$).
cPanel en shared hosting suele dejar ejecutar cronjobs (mundiserver.com tienen desde 1euro al mes, pregunta si permiten ejecutar crons con plesk).
Si no VPS.

Josepanaero

#13, ¿podrías exponer qué tarea exactamente es la que quieres hacer? A lo mejor se puede encontrar otra solución que no requiera de una ejecución periódica.

1 respuesta
KoRMuZ

He estado leyendo el faq de 1and1 y efectivamente hay packs que sí que lo soportan, solo que son superiores al mio. Seguramente actualizaré en poco tiempo el pack y así podré hacerlo desde ahi.

#15 . Lo que quiero hacer es cambiar un solo campo de la base de datos, si es diferente al que ya está cada media hora.

Campo1 = 1:
restultado = compruebaEstadoDeCampo1();
if (resultado != Campo1){
*Guardar en la base de datos*
}

Ahora mismo estoy haciendo la actualizando la información cuando un usuario entra en la página concreta, pero, en la página principal, pueden pasar horas (si un usuario no entra) hasta que se actualice esa información.

Pyronhell

Además de todas las opciones que te han dicho, tienes la de usar un fork (http://php.net/manual/es/function.pcntl-fork.php) para crear un subproceso, aunque dudo horrores que un hosting te lo permita.

Si no, una manera muy guarra es un un set_time_limit(0) y un while(1){} pero si alguien pregunta yo no te he dicho que hagas eso.

Hasta que tengas disponible un CRON, lo mejor es lo que te ha comentado #11, pones tu script en un php desde la web (con algún parámetro get o algo secreto) y lo llamas cada media hora o lo que necesites desde otro sitio. Creo que hay webs gratis que te lo permiten.

KoRMuZ

Bueno, se me ha ocurrido algo, aunque no se si será la mejor manera de hacerlo.

A cada elemento de la base de datos, meterle un campo last-updated, y cuando se entre en la página principal, si ha pasado más de media hora, refrescarlo, sino, seguir tal cual.

¿Os parece correcta la solución?

1 respuesta
Pyronhell

#18 Aún sin saber para qué sirve el campo es mucho mejor que meter una tarea programada, seguro. Aunque también depende del número de consultas a realizar y tal.

1 respuesta
KoRMuZ

#19 El campo es para ver la última vez que se ha actualizado. Así, si la diferencia con el time actuar es de mas de 30 minutos, actualiza.

Las consultas son unas 25.

N1Tr0s

#1 No se si te servirá, pero en 000webhost me parece recordar que se podian programar procesos (meter un .php o algo de eso, no estoy seguro) y creo que era gratis, pero lo que digo, NO ESTOY SEGURO. suerte

1 respuesta
KoRMuZ

Gracias #21 . Lo miraré a ver que tal.

Tunnecino

Un cron free con un intervalo un mínimo de 10m: https://www.setcronjob.com/prices
Cindo crons free: http://www.onlinecronjobs.com/
Los que quieras intervalo mínimo de 8 minutos: http://www.easycron.com/pricing

Y si, soy un mago, pero un mago nunca desvela su google, digo su truco.

radykal

Si sólo quieres un cronjob te lo puedo meter en el cron de mi dedicado, pásame la URL que quieres que se ejecute y la periodicidad y te lo añado.

Usuarios habituales

  • Tunnecino
  • KoRMuZ
  • Pyronhell
  • Josepanaero
  • HaxeR
  • elkaoD
  • kraneok