2010-08-23 6 views
6

Según lo que puedo ver, Gearman no admite trabajos programados ni trabajos retrasados. Estaba pensando que quizás el trabajo programado podría ponerse en cola en el at primero y luego agregarse a la cola de Gearman después de que el período de tiempo at haya expirado.Programe un trabajo en Gearman para una fecha y hora específicas

at tareas son persistentes, ya que se escriben como archivos en un directorio en el directorio de cola del servidor. Por lo tanto, el único cuello de botella sería una secuencia de comandos simple para agregar la tarea a la cola de Gearman porque at no se puede distribuir entre los servidores. Pasarlo a Gearman para procesar el trabajo real significa que puedo obtener el registro de trabajo adecuado, etc.

¿Es esta la mejor manera de abordar esto y tienes alguna idea alternativa?

La razón por la que he optado por Gearman sobre otras soluciones de cola es que tiene una extensión de PHP.

El código que estoy escribiendo se utiliza para mantener una cola de correos electrónicos que deben enviarse. Así que puedo especificar que quiero enviar un correo electrónico a [email protected] a las 9.50 del viernes, por ejemplo.

+6

Esto se debe a que nosotros, los alemanes, hacemos nuestro trabajo * * enseguida. No necesitamos ninguna programación. –

+1

¡Muy gracioso! Parece que todas las preguntas de Gearman son riffs de esta manera. – Treffynnon

+2

@Treffynnon sí, lo invitan a ... Con demasiada frecuencia se los pone en el camino correcto ("Cómo detener a un trabajador de engranaje", "matar a los trabajadores de engranaje con un comando" ...) :) –

Respuesta

1

Una solución un tanto hacky, que solo funcionaría bien a una resolución horaria o diaria, sería hacer que el nombre del trabajo (función) contenga la fecha en la que lo deseaba. . Luego, haga que los trabajadores comiencen en cron cada hora o día para registrarse para esos trabajos.

Por ejemplo, si desea enviar un correo electrónico a las 9AM del lunes 12 de marzo de 2012, agregue un trabajo a la cola con un nombre como email_2012-03-12_09: 00. A continuación, ejecute un trabajo cron cada hora, que ejecuta un trabajador que se registra para cualquier trabajo que coincida con email_ + fecha y hora actuales.

Como digo, probablemente viable, pero bastante hacky!

ACTUALIZACIÓN 1: vi recientemente que la documentación para gearmand database persistence ahora mencionan un campo denominado when_to_run que es un INT, y potencialmente podrían contener una marca de tiempo Unix época. Este campo no parece estar referenciado todavía en el código.

0

Si está utilizando Zend ...

SlmQueue es una capa de abstracción de cola de trabajo. Le permite usar fácilmente los sistemas de cola de trabajos en una aplicación Zend Framework 2. Por lo tanto, no lo obliga a utilizar específicamente un tipo de cola de trabajos. Puede escribir su código y trabajos independientemente del sistema subyacente. Esto permite una gran flexibilidad y desacoplamiento de los sistemas.

https://github.com/juriansluiman/SlmQueue

Cuestiones relacionadas