跨多个主机调度cron

时间:2014-01-16 09:38:04

标签: ruby-on-rails ruby cron

我正在开发一个Ruby On Rails项目。用户通过使用Ruby on Rails开发的UI根据他们请求的时间间隔发送报告。 从控制器,我为请求创建cron条目并更新crontab文件。 crontab触发脚本,该脚本生成报告给用户并将其邮寄给用户。 用户还可以编辑报告的时间间隔,并相应地在crontab文件中进行更改。要更新/创建crontab,我创建了一个cron'reportcron.cron'和。的副本 使用以下命令从控制器(report_controller.rb)覆盖现有的cron文件

system(“crontab< reportcron.cron”)

问题在于它可以在单个主机中完美地工作。如果使用多个主机,则可以创建重复的cron条目。 假设用户通过host1创建新请求,下次他可以通过host2编辑相同的请求,此时host1(不正确/先前的cron)和host2(正确/最新的cron)中存在两个相同请求的cron条目。我发现rubygem发条或rufus-scheduler可以解决这个问题,但我不知道它是如何工作的,我不确定两个主机如何维护和运行cron jobs.Could任何人都可以解释两个主机如何维护cron?我是ruby和RoR的新手。请帮忙。谢谢!

1 个答案:

答案 0 :(得分:0)

使用比cron更合适的调度程序。例如

https://github.com/resque/resque-scheduler

任务被序列化到网络数据存储,因此您可以将它们从多个主机转到单点。然后,您可以单独或并行地在指定时间处理任务,而不必担心会有任何重复的任务或工作。

调整自述文件中的示例

Resque.enqueue_at(5.days.from_now, SendReport, :user_id => current_user.id)