2009-08-12 16 views
5

Estoy usando MYSQL como mi base de datos y PHP como mi lenguaje de programación. Quería ejecutar un trabajo cron que se ejecutaría hasta que la fecha actual del sistema coincida con la columna "fecha límite" en la tabla de mi base de datos llamado "PROYECTO". Una vez que las fechas son las mismas, se debe ejecutar una consulta de actualización que cambiaría el estado (campo de la tabla de proyectos) de "abierto" a "cerrado".cron jobs o PHP scheduler

No estoy muy seguro de si los trabajos cron son la mejor manera o podría utilizar activadores o puede ser algo más. También estoy usando Apache como mi servidor web y mi sistema operativo es Windows Vista.

¿Cuál es la mejor manera de hacerlo? Programador PHP o trabajos cron o cualquier otro método? ¿Alguien puede iluminarme?

+1

Peligrosamente similar a http://stackoverflow.com/questions/1263237/cronjob-trigger-which-can-update-the-database-everyday - Aunque es distinto porque pregunta si debería usar una tarea programada o la el programador interno de la base de datos – gnarf

+0

También kaushik: ¿qué versión de servidor mysql tiene? – gnarf

Respuesta

1

Siempre buscaría un trabajo de cron para cualquier programación relacionada.

El gran punto de bonificación es que también puede hacer eco de la información y recibirla por correo electrónico.

Una vez que empiezas a usar cronjobs, encontrarás que es difícil de detener.

+0

, pero ¿cómo se hace en un sitio web? al igual que los sitios web comerciales lo hacen con la ayuda de trabajos cron? ¿Los trabajos de cron son los mejores? porque podemos cambiar los hosts y es posible que tengamos que configurarlo cada vez que cambiemos los hosts. –

+1

Tendría que hacerlo desde una cuenta shell en el host. Si conecta SSH a su servidor web, localice el archivo php que desea ejecutar, escriba crontab -e y luego agregue el comando, es decir, */5 * * * */usr/bin/php/home/youraccount/sitio web/file.php Eso debería ejecutarse cada cinco minutos más o menos. Busque en google generadores crontab y le ayudarán a ajustar los tiempos y generar las cadenas de comandos para usted. Usted tendría que guardar el crontab cuando la transferencia entre los ejércitos: crontab -l> myct.txt y en el nuevo servidor, creo que es crontab

1

cron no existe, per se, en vista, pero lo que sí existe es el administrador de programación de Windows estándar que se puede ejecutar con una línea de comando como "php -q -f myfile.php" que ejecutará el archivo php en el tiempo dado.

también puede utilizar un puerto del programa cron, hay muchos por ahí.

si no es crítico para el segundo, cualquier aplicación de programación de Windows funcionará, solo asegúrese de tener su ruta de bin PHP en su variable PATH para simplificar.

0

¿qué hay de PHPscheduler..R ellos no son mejores que cronjobs? Creo que los crones serían independientes de la aplicación, por lo tanto, sería difícil si uno tiene que cambiar el host ... aunque no estoy muy seguro ... ¡Sería genial si alguien pudiera comentar sobre esto! ¡Gracias!

4

Creo que su concepto debe cambiar.

PHP no puede programar un trabajo, tampoco MySQL. Los desencadenantes en MySQL se ejecutan cuando se produce una consulta de mysql, no en un momento específico. Ni

Esta limitación generalmente no es un problema en el desarrollo web. La razón es porque su aplicación PHP debería controlar todos los datos entrantes y salientes. Por lo general, esto significa solo el HTML que muestra esos datos u otros formatos para los usuarios u otros programas.

En su caso, puede pensarlo de esta manera. La fecha límite es una fecha establecida. Puede tratarlo como datos y guardarlo en su base de datos. Cuando la fecha límite no es importante, es que los datos que ha enviado en su base de datos se ven correctamente.

Cuando se realiza una solicitud a su aplicación, verifique si la fecha de vencimiento es anterior, si es así, luego visualice que el proyecto está cerrado o actualice que el proyecto está cerrado, justo antes de la visualización.

Realmente no hay razón para actualizar los datos independientemente de su aplicación PHP.

Normalmente, las únicas cosas que desea programar son trabajos que afectarían su aplicación en términos de carga, o que deben realizarse solo una vez, o donde la concurrencia o el tiempo son un problema.

En su caso, ninguno de ellos se aplica.

PD: No he probado PHPscheduler pero puedo adivinar que no es un verdadero programador. Cron es un Deamon que duerme hasta que una tarea determinada se debe ejecutar en su cola, ejecuta la tarea y luego duerme hasta que venza la siguiente (al menos eso es lo que hace en el algoritmo actual). PHP no puede hacer eso sin los sockets y las extensiones de la horquilla, como configuración especial. Así que PHPscheduler probablemente solo esté comprobando si una fecha para una tarea ha expirado, en cada carga de una página web (siempre que PHP ejecute una página). Esto no es diferente, solo debes verificar si la fecha del proyecto ha expirado, sin la sobrecarga de PHPScheduler.

+0

Para PHPScheduler Para que funcione correctamente, debe iniciar el planificador para buscar trabajos regularmente, lo cual se hace colocando código en una página activa. Por lo tanto, si obtiene una vista de página por hora, puede programar un trabajo para que se ejecute cada hora, pero no minuciosamente. No es una solución que recomendaría para trabajos que son críticos. – DavidScherer

1

Para trabajos de Windows CRON No puedo recomendar PyCron suficiente.

+0

+1: también he tenido mucho éxito. –

0

Si bien las tareas programadas de CRON y Windows son las formas probadas y verdaderas de programar trabajos/tareas para ejecutar de forma regular, hay casos de uso donde tener una tarea programada diferente en CRON/Windows puede volverse tedioso. A saber, cuando desea que los usuarios programen cosas para que se ejecuten, o para casos en los que prefiera simplicidad/mantenimiento/portabilidad/etc. o todo lo anterior.

En los casos donde prefiero no usar CRON/Windows para tareas programadas, construyo en la aplicación un sistema de programación de tareas. Esto aún requiere la programación de 1 trabajo CRON o tarea de Windows. La idea es almacenar los detalles del trabajo en la base de datos (nombre del trabajo, propiedades del trabajo, último tiempo de ejecución, intervalo de ejecución, cualquier otra cosa que sea importante para su implementación). Luego, programa un trabajo "maestro" en CRON o Windows, que maneja la ejecución de todos tus otros trabajos por ti. Necesitarás que este trabajo maestro se ejecute al menos tan a menudo como tu intervalo más corto; si desea poder programar trabajos que se ejecutan cada minuto, el trabajo maestro debe ejecutarse cada minuto.

A continuación, puede iniciar cada trabajo programado en segundo plano desde PHP con un mínimo esfuerzo (si lo desea). En sistemas con memoria limitada puede monitor memory usage o realizar un seguimiento de los PID (varios métodos) y limitar a N trabajos que se ejecutan en un momento dado.

He tenido un gran éxito con este método, YMMV, sin embargo, en función de sus necesidades y su implementación.