我想在特定时间段内执行某项任务。假设我想每半小时在早上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
答案 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