【问题标题】:How to update a cron based on a datetime in the db如何根据数据库中的日期时间更新 cron
【发布时间】:2012-02-12 14:28:17
【问题描述】:

好的,所以我使用 mysql 数据库运行应用程序,该数据库在 orders 表中有一个名为 end_date 的字段。此字段由管理员管理。我需要一个在 end_date 字段前 2 周运行的 cronjob。关于如何做到这一点的任何想法。我也在使用无论何时 gem

every 1.day, :at => '12:30 am' do 
  runner "Order.task_that_checks_date"
end

我的第一个想法是每天运行一个 cron 作业并检查该值,但如果我只需要每年运行一次 cron,我讨厌每天运行一个 cron。关于如何改进这一点的任何想法

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 cron scheduled-tasks


    【解决方案1】:

    我能想到的最流畅的解决方案是在应用程序的某处设置“next_cron”日期,并在after_save 挂钩上更新它。逻辑是在应用程序中找到最快的 end_date,并将“next_cron”日期设置为在那之前的两周。 cron 要么在该日期之前根本不运行,要么每隔一段时间检查一下今天是否是 next_cron 日,要么执行它的操作,要么退出。

    话虽如此,我认为让你的 cron 每天运行实际上更高效,只需检查它是否需要采取任何行动。这取决于您希望将多少任务放入系统,但作为一般规则,我宁愿让后台进程在凌晨 3 点花费 30 秒,也不愿让面向用户的操作在高峰期多花 0.05 秒交通时间。

    【讨论】:

      猜你喜欢
      • 2011-08-15
      • 2011-09-26
      • 2019-01-15
      • 1970-01-01
      • 2019-11-07
      • 2020-08-18
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多