Programe un trabajo en Gearman para una fecha y hora específicas
Pregunta
Por lo que puedo ver que Gearman no admite trabajos programados o trabajos retrasados. Estaba pensando que tal vez el trabajo programado podría ser en cola en at
Primero y luego se agregó a la cola de Gearman después del at
El período de tiempo ha expirado.
at
Las tareas son persistentes ya que se escriben como archivos para un directorio en el directorio de carrete del servidor. Por lo tanto, el único cuello de botella sería potencialmente un script simple para agregar la tarea a la cola de Gearman porque at
No se puede distribuir en 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 tiene 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. Por lo tanto, puedo especificar que quiero enviar un correo electrónico a ejemplo@example.org a las 9.50 del viernes.
Solución
He decidido ir al at
ruta como se establece originalmente en mi pregunta. Para el propósito, he escrito un pequeño envoltorio PHP para el at
binario y lo probé en Ubuntu. Si está interesado, se puede encontrar en GitHub: http://github.com/treffynnon/php-at-job-queue-wrapper
Otros consejos
Una solución bastante hacky, que solo funcionaría bien en la resolución por hora o diaria sería hacer que el nombre del trabajo (función) contenga la fecha en que deseaba que lo enviara. Luego, tenga a los trabajadores que comienzan en Cron cada hora o día para registrarse para esos trabajos.
Por ejemplo, si desea enviar un correo electrónico a las 9 a.m. el lunes 12 de marzo de 2012, agregue un trabajo a la cola con un nombre como correo electrónico_2012-03-12_09: 00. Luego tenga un trabajo de Cron ejecutando por hora, que dirige a un trabajador que se registra para cualquier trabajo que coincida Email_ + Fecha y hora actuales.
Como digo, probablemente viable, ¡pero más bien hacky!
Actualización 1: Vi recientemente que los documentos para Persistencia de la base de datos de Gearmand Ahora mencione un campo llamado WHE_TO_RUN que es un EN T, y potencialmente podría mantener una marca de tiempo de la época de Unix. Este campo aún no parece ser referenciado en el código.
Si estás usando zend ...
SlMqueue es una capa de abstracción de cola de trabajo. Le permite usar fácilmente los sistemas de cola de trabajo en una aplicación Zend Framework 2. Por lo tanto, no le impone usar específicamente un tipo de cola de trabajo. Puede escribir su código y trabajos independientemente del sistema subyacente. Esto permite una gran flexibilidad y desacoplamiento de los sistemas.