2009-10-28 11 views
7

Estoy utilizando trabajo retrasado para administrar el trabajo en segundo plano.
Sin embargo, tengo algunas tareas que deben ejecutarse a intervalos regulares. Cada hora, todos los días o todas las semanas, por ejemplo.trabajos retrasados ​​regulares

Por ahora, cuando ejecuto la tarea, creo una nueva para ser ejecutada en un día/semana/mes.

Sin embargo, realmente no me gusta. Si por alguna razón, la tarea no se ejecuta por completo, no creamos la siguiente y podríamos perder la ejecución de la tarea.

¿Cómo gestiona ese tipo de cosas (con trabajo retrasado) en sus aplicaciones de rieles para asegurarse de que su lista de tareas regulares sigue siendo la correcta?

Respuesta

5

Si usted tiene acceso a Cron, le recomiendo Siempre

http://github.com/javan/whenever

especificar lo que desea ejecutar y con qué frecuencia en rubí muerto simple, y siempre que los suministros rastrillo tareas para convertir esto en una crontab y actualizar el crontab de su sistema.

Si no tiene acceso a cron frecuentes (como yo no, ya que estamos en Heroku), entonces DJ es el camino a seguir.

Tienes un par de opciones.

  1. Haga lo que esté haciendo. DJ volverá a intentar cada tarea un cierto número de veces, por lo que tiene cierta indulgencia

  2. Coloque el código que crea el siguiente trabajo de DJ en un bloque de seguridad, para asegurarse de que se crea incluso después de una excepción u otro evento incorrecto

  3. Cree otro DJ que se ejecute periódicamente, compruebe para asegurarse de que existan los DJ adecuados, y los crea si no lo hacen. Por supuesto, esto es tan propenso a errores como las otras opciones, ya que el monitor y el DJ real se están ejecutando en el mismo entorno, pero es algo.

+0

Qué bueno, siempre. Con algunas tareas que me permiten recargar el crontab cuando cambio algo (necesito cambiar las tareas dinámicamente). Gracias :) –

1

¿Hay algún motivo en particular por el que no use cron para este tipo de cosas? O tal vez algo más rubí como rufus-scheduler, que es bastante easy to use y muy confiable.

Si no necesita hacer cola, estas herramientas son una manera de hacerlo, creo.

+1

Bueno, yo ya tengo el trabajo retardado deamon. Y me gustaría evitar lanzar una segunda. –

+0

No es necesario que ejecute ningún daemon nuevo con rufus-scheduler. Utiliza bucle simple o EventMachine para verificar la ejecución de trabajos. cron es un daemon, pero por lo general lo necesitas y lo ejecutas de todos modos. –