Rails在特定时间段内执行Cron Job或Rake任务

时间:2013-12-07 20:38:23

标签: ruby-on-rails ruby cron scheduled-tasks rake-task

我想在特定时间段内执行某项任务。假设我想每半小时在早上6点到9点之间执行cronjob或一些rake任务。因此脚本将执行6,6:30,7,7:30 ......并且最后执行9.

请你给我一些建议,告诉我如何用Rails做到这一点。

不要告诉我安排6,6:30,7。时间段的个人任务。

ANS
我发现最简单的方法是每当gem使用并添加cronjob时间如下。

every '*/30 6-9 * * *' do
  runner "Model.method"
end

3 个答案:

答案 0 :(得分:1)

最简单的方法之一是通过名为whenever的Ruby gem。它为您提供了一个非常好的DSL(特定于域的语言),您可以使用它来完成您想要的任务。我以前用它来进行服务器应用程序部署,它就像一个魅力!

这是Github上gem库的链接:
https://github.com/javan/whenever

这里还有一个很棒的RailsCast,你可以看看如何在Rails中设置它: 的 http://railscasts.com/episodes/164-cron-in-ruby


你应该可以这样做:

every :day, :at => (6..8).to_a.map { |x| ["#{x}:00","#{x}:30", "#{x+1}:00"] }.flatten do
  # Run rake task.
end

# => ["6:00", "6:30", "7:00", "7:00", "7:30", "8:00", "8:00", "8:30", "9:00"]

您可以调整初始范围和内部块以覆盖您想要的任何范围。 whenever方便地处理军事时间格式(24小时制),这使得它很好用。

希望有所帮助!

答案 1 :(得分:1)

我喜欢将delayed_job用于计划任务 - https://github.com/collectiveidea/delayed_job

当您使用作业时,可以指定run_at属性

答案 2 :(得分:0)

我知道这是一篇旧帖子,但它刚刚出现在我身上,所以我想我会插话。我在我的 cron 工作中使用了every gem,并且有一个需要每分钟执行一次但仅在美国股票交易期间小时。在我的 schedule.rb 我有:

every '*/1 09-17 * * *' do 
 rake "rake_namespace:rake_task"
end