2012-05-10 21 views
5

Actualmente estoy intentando construir un buen sistema de programación como interfaz para configurar y editar tareas cron en mi sistema. Mi sistema está construido usando Zend framework 1.11.11 en un servidor Linux.Creación de un programador de tareas cron

tengo 2 problemas principales que quiero su sugerencia para:

Problema 1: La configuración de la aplicación en sí

tengo 2 formas de ejecutar la tarea cron:

  1. La primera manera es crear una carpeta scripts y crear un archivo de rutina de carga común donde cargaré solo los recursos que necesito. Luego, para cada tarea, crearé un script separado y en cada script incluiré el archivo bootstrap. Finalmente, agregaré una tarea cron en el archivo crontab para cada uno de estos scripts y la tarea será algo así como ***** php /path/to/scripts/folder/cronScript_1.php.

  2. En segundo lugar tratar el trabajo cron como una solicitud normal (sin bootstrap especial). Agregue una tarea cron en el archivo crontab para cada uno de estos scripts y la tarea será algo así como ***** curl http://www.mydomain.com/module/controller/action.

Problema 2: La interfaz de la aplicación

Adición de una tarea programada también se puede hacer de 2 maneras:

  1. Para cada tarea, habrá una entrada en el archivo crontab. cuando quiero agregar una nueva tarea, debo hacerlo a través de cPanel o de cualquier otro medio para editar el crontab (que podría no estar disponible).

  2. Almacene las tareas en la base de datos y proporcione una IU para interactuar con la base de datos (cuadrícula para agregar algunas tareas y configuración). Después de eso, solo escriba 1 tarea cron en el archivo crontab que se ejecuta cada minuto. Este trabajo seleccionará todos los trabajos de la base de datos y verificará si hay un trabajo que deba ejecutarse ahora (el tiempo para las tareas se almacenará y se comparará con la hora actual del servidor).


En su opinión qué camino es mejor para poner en práctica para cada parte? ¿Hay una solución preparada para esto que sea mejor en general?

Nota

me encontré con Quartz voluntad en busca de una solución ya preparada. ¿Es esto lo que estoy buscando o es algo totalmente diferente?

Gracias.

+0

El cuarzo es para Java, así que no creo que sea una tarea fácil de integrar con zend-framework. – Zombaya

Respuesta

4

Solo mi opinión, pero personalmente me gustan los dos 1 & 2 en función de lo que su secuencia de comandos tiene la intención de lograr. Por ejemplo, generalmente hacemos 1 con todas nuestras entradas de cron ya que es muy fácil ver/etc/crontab y ver de un vistazo cuándo se supone que se deben ejecutar las cosas. Sin embargo, hay momentos en los que se necesita llamar un script cada minuto porque la lógica dentro del script entonces descubrirá qué ejecutar en ese minuto exacto. (es decir.millones de usuarios que necesitan procesarse continuamente para que tenga una fórmula para lo que los usuarios deben hacer en cada minuto de la hora)

También eche un vistazo a Gearman (http://gearman.org/). Le permite tener scripts cron ejecutándose en una máquina que luego segmenta los trabajos en bits más pequeños y los distribuye en otros servidores para su procesamiento. Usted tiene control total sobre qué tan lejos quiere tomar el aspecto del mapa/reducirlo. Nos ha ayudado inmensamente y nos permite procesar miles de secuencias de comandos de algoritmos por minuto. Si necesitamos más potencia, simplemente generamos más nodos "caballo de batalla" y Gearman los detecta y utiliza automáticamente.

Actualmente hacemos todo en la línea de comandos y no usamos cPanel, Plesk, etc. por lo que no puedo dar fe de lo que es editar el crontab de uno de esos back-ends. Es posible que desee considerar que una persona sea el crontab "guardián" de su equipo. Tire las entradas de crontab esperadas a una carpeta no accesible en la web en su código de proyecto. Luego, cada vez que se realiza un cambio en el archivo para controlar la versión, se espera que esa persona entre en SSH en la máquina adecuada y realice los cambios. No estoy seguro de su estructura interna, por lo que esto puede ser factible o no, pero es una buena idea que los desarrolladores puedan ver las formas en que crontab ejecutará los scripts.

+1

+1 Gracias por la respuesta detallada :) Definitivamente voy a mirar a Gearman. Sin embargo, tengo una pregunta: ¿Qué sucede si estoy realizando un proyecto en un alojamiento compartido donde no tendré la libertad de manipular el servidor para mis necesidades? ¿Gearman será una buena solución o tendré que construir un sistema personalizado dentro de mi aplicación? – Songo

+0

@Songo Solo he implementado en mi propio hardware o servidores dedicados con acceso de root. No creo que pueda usarlo en un entorno compartido a menos que tenga acceso de administrador. –

0

Para Problema 2: La interfaz para la aplicación He usado ambos métodos 1 & 2. Recomiendo encarecidamente el 2º. Tomará bastante más trabajo inicial la creación de las tablas de la base de datos y la construcción de la interfaz de usuario. Sin embargo, a largo plazo, será mucho más fácil agregar nuevos trabajos para ejecutar. Construyo la interfaz de usuario para mi empresa actual y es tan fácil de usar que personas no técnicas (contadores, supervisores de almacén) pueden ingresar y crear trabajos.

Mucho más fácil que iniciar sesión en el servidor como root, editar crontab, recordar los patrones y guardar. Además, no se lo conocerá como "el tipo crontab" al que todos acceden cuando quieren agregar algo a crontab.

En cuanto a la configuración de la aplicación en sí, tendría cron llamar a una secuencia de comandos y hacer que la secuencia de comandos ejecutar el resto. De esta forma solo necesitas 1 entrada de cron. Solo tenga en cuenta que si ejecutar las tareas lleva mucho tiempo, debe asegurarse de que la secuencia de comandos solo comience a ejecutarse si no hay otras instancias ejecutándose. De lo contrario, puede terminar con el mismo trabajo ejecutándose dos veces.

Cuestiones relacionadas