铁轨的cron工作:最佳实践?

在Rails环境中运行计划任务的最佳方式是什么? 脚本/亚军? 耙?


我正在使用rake方式(由heroku支持)

用一个名为lib / tasks / cron.rake的文件。

task :cron => :environment do
  puts "Pulling new requests..."
  EdiListener.process_new_messages
  puts "done."
end

要从命令行执行,这只是“rake cron”。 然后可以根据需要将该命令放在操作系统cron / task scheduler上。

更新这是一个相当古老的问题和答案! 一些新的信息:

  • 我引用的heroku cron服务已经被Heroku Scheduler取代
  • 对于频繁的任务(尤其是你想避免Rails环境启动成本的地方),我的首选方法是使用system cron来调用一个脚本,该脚本将(a)戳一个安全/专用的webhook API来在后台调用所需的任务或者(b)直接排队在您选择的排队系统上执行任务

  • 我已经在极其依赖计划任务的项目中使用了非常受欢迎的Whenever,这非常棒。 它给你一个很好的DSL来定义你的计划任务,而不必处理crontab格式。 从自述文件:

    每当一个Ruby gem提供了清晰的语法来编写和部署cron作业。

    自述文件中的示例:

    every 3.hours do
      runner "MyModel.some_process"       
      rake "my:rake:task"                 
      command "/usr/bin/my_great_command"
    end
    
    every 1.day, :at => '4:30 am' do 
      runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
    end
    

    假设您的任务不需要太长时间才能完成,只需为每个任务创建一个新的控制器并执行操作。 将任务的逻辑作为控制器代码实现,然后在操作系统级别设置一个cronjob,它使用wget以适当的时间间隔调用此控制器的URL和操作。 这种方法的优点是你:

  • 像正常控制器一样,可以完全访问所有Rails对象。
  • 可以像正常操作一样开发和测试。
  • 也可以从简单的网页中调用您的任务。
  • 不要通过启动额外的ruby / rails进程来消耗更多的内存。
  • 链接地址: http://www.djcxy.com/p/66337.html

    上一篇: A cron job for rails: best practices?

    下一篇: How do I list all cron jobs for all users?