2013-06-14 9 views
0

Моих инициализаторов/task_scheduler.rbРуфус-Scheduler проблемы для хрон рабочих мест в Linode убунте

require 'rubygems' 
require 'rufus/scheduler' 

scheduler = Rufus::Scheduler.start_new 

scheduler.cron '*/5 * * * *' do 
    Project.cron_for_report 
end 

Мой вопрос я получаю 12 писем отчета через каждые 5 минут. Я получаю только 1 почту каждые 5 минут. Должен ли я использовать что-то вроде мьютекса? Просьба привести примерный код.

Пожалуйста, помогите.

Заранее спасибо.

ответ

1

Это не похоже на проблему с rufus-scheduler, похоже, что вы используете 12 Rails-процессов, но не знаете, на чем вы работаете Rails (Unicorn, Passenger, ...?).

Поскольку вы работаете на Ubuntu, вы можете использовать crond. Почему бы вам не взглянуть на https://github.com/javan/whenever? Это позволит вам использовать силу коллажа из вашего приложения Rails.

Rufus-scheduler - это весело, но если вы просто запускаете его каждый раз, когда запускается Rails, вы получите экземпляр rufus-scheduler для каждого процесса Rails, если вы не поместите некоторую логику в инициализатор, чтобы избежать такой ситуации (файлы блокировки и т. д.). И ваша логика должна быть достаточно умной, чтобы избежать блокировок, указывающих на мертвых планировщиков, предотвращающих запуск новых, необходимых, планировщиков и т. Д.

С момента развертывания на Linode/Ubuntu вы можете рассмотреть другие альтернативы, такие как Whenever.

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

+0

Спасибо за ответ. –

+0

Это была ошибка. Текущей проблемой является выполнение задания 4 раза. мое приложение rails содержит 4 рабочих-единорогов. Возможно, это создает 4 планировщика. Как сделать это как 1 планировщик? –

+0

Пожалуйста, прочитайте мой ответ, в нем есть намек на решение. – jmettraux