Проблема с Rufus-Scheduler для заданий cron в linode ubuntu

Мои инициализаторы /task_scheduler.rb

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-планировщиком, похоже, что вы запускаете 12 процессов Rails, но вы не говорите, на чем работает Rails (Unicorn, Passenger, ...?).

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

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

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

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

Другие вопросы по тегам