2009-10-28 2 views
7

Я использую Delayed Job для управления фоновой работой.
Однако у меня есть некоторые задачи, которые необходимо выполнить с регулярным интервалом. Каждый час, каждый день или каждую неделю, например.Регулярные задержки работы

Теперь, когда я выполняю задачу, я создаю новый, который будет выполнен в один день/неделю/месяц.

Однако мне это не очень нравится. Если по какой-либо причине задача не выполнена полностью, мы не создаем следующую, и мы можем потерять выполнение задачи.

Как вы управляете такими вещами (с замедленной работой) в своих приложениях rails, чтобы убедиться, что ваш список обычных задач остается верным?

ответ

5

Если у вас есть доступ к Cron, я настоятельно рекомендую Когда

http://github.com/javan/whenever

Вы указываете, что вы хотите запустить и на какой частоте в мертвой простой рубин, и всякий раз, когда поставки разгребать задач преобразовать это в crontab и обновить crontab вашей системы.

Если у вас нет доступа к частым cron (как я этого не делаю, так как мы на Heroku), то DJ - это путь.

У вас есть пара вариантов.

  1. Выполняйте то, что вы делаете. DJ будет повторять каждую задачу определенное количество раз, поэтому у вас есть небольшая снисходительность.

  2. Поместите код, который создает следующее задание DJ в блоке обеспечения, чтобы убедиться, что он создается даже после исключения или другого плохого события

  3. Создайте еще одного диджея, который периодически запускается, проверяет, чтобы соответствующие ди-джеи существовали, и создает их, если они этого не делают. Конечно, это так же, как и вероятность ошибок, как и другие опции, поскольку монитор и фактический DJ работают в одном и том же режиме, но это что-то.

+0

Хорошая вещь, всякий раз. С некоторыми задачами, позволяющими мне перезагрузить crontab, когда я что-то меняю (мне нужно динамически менять задачи). Благодаря :) –

1

Есть ли какая-то особая причина, почему вы не использовали cron для этого типа вещей? Или, может быть, что-то более рубиново, как rufus-scheduler, что довольно easy to use и очень надежно.

Если вам не нужна очередь, эти инструменты - это путь, я думаю.

+1

Ну, у меня уже есть отложенная работа деамона. И я хотел бы избежать запуска второго. –

+0

Вам не нужно запускать новый демон с помощью rufus-scheduler. Он использует простой цикл или EventMachine для проверки выполнения заданий. cron - это демон, но вы, как правило, нуждаетесь в нем и работаете в любом случае. –

Смежные вопросы