【问题标题】:Need to run a job at a specific time需要在特定时间运行作业
【发布时间】:2011-08-29 22:53:03
【问题描述】:

我正在尝试创建一个作业,以便向 Twilio 调用发送通知,因此拥有一个能够确保作业在特定时间运行的强大解决方案非常重要(我不认为被放置进入队列就足够准确了)。

此类任务的最佳解决方案是什么?

这些通知需要在通话中的特定时间发生。比如“还剩1分钟”。因此它需要能够:

  1. 在任意时间运行(下午 1:22 或凌晨 2:45)
  2. 由用户输入定义(他们设置通话时间)

(如果该解决方案可以在 Heroku 上运行就好了)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 heroku


    【解决方案1】:

    您可以使用 Heroku cron 每天或每小时运行作业。

    每日 cron 是免费的,每小时 cron 费用为 3 美元/月:http://addons.heroku.com/cron

    通常cron 在您第一次启动它时运行(即,如果您将其设置在下午 3 点,它将在每天下午 3 点运行),但您可以通过发送电子邮件至 support@heroku.com 来更改它.

    要在 cron 中运行代码,请将您的代码添加到 cron.rake 文件并查看 cron 文档 here

    仅供参考

    Heroku 自己的 cron 示例建议进行时间检查,即

    if Time.now.hour % 4 == 0 # run every four hours
      ...
    

    但是,如果您每天运行 cron,则代码将在可能失败上述条件的时间运行。因此,除非您支付每小时 cron 的费用并且您只希望它运行 特定 小时,否则请忽略他们的示例代码的那部分并正常包含您自己的代码。

    在特定时间运行

    试试delayed_job:run_at 列,它可以为您提供在特定时间运行作业所需的灵活性。

    Heroku 文档:http://devcenter.heroku.com/articles/delayed-job

    【讨论】:

    • 如果我试图在通话中发出通知,这将不起作用。需要能够按分钟运行(我会更新我的问题以更清楚)
    • 仅供参考 - 此答案中引用的插件现在称为 heroku scheduler
    【解决方案2】:

    您需要为此添加一个 cronjob。如果你在 Linux 机器上,那么你可以在 crontab 中添加一个 cron 并指定它运行的时间。它非常灵活。您可以在这里找到详细信息:
    http://en.wikipedia.org/wiki/Cron

    如果您想以 ruby​​ 方式进行,请随时尝试 gem:
    https://github.com/javan/whenever

    【讨论】:

    • 那不是要求您提前知道时间吗?还是可以随意设置?
    • 如果你想在任意时间运行 cron,那么你可以编写另一个 cron 来不断用新的任意时间更新 crontab。更新 crontab 的 cron 应该更频繁地运行,比如每 1 分钟或 5 分钟,它会为新的任意时间添加一个条目。您将不得不编写另一个 cron 来清理 crontab(已执行的 crons),并且它可以每天运行一次。我希望你能得到方法。
    • 如果您不知道 cron 何时运行,并且时间是从代码的某处生成的,则应遵循上述方法。如果您可以决定它在每个月的第 7 天、第 2 小时等运行,那么您应该查看 cron 示例。它们非常灵活,您可以随时使用不同的组合来实现。可能你需要重新审视你的方法。您可以将所有这些条目转储到带有时间戳(何时执行)的表中,并且 cron 每 1 分钟运行一次并在 (timestamp - Time.now)
    【解决方案3】:

    对于你提到的具体情况,我认为你应该试试delayed_job:
    https://github.com/collectiveidea/delayed_job#readme

    它有一个 run_at 选项,您可以在其中指定要运行作业的时间。

    【讨论】:

      【解决方案4】:

      在您的主机控制面板中转到 cron 作业

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-26
        • 1970-01-01
        • 2016-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-31
        相关资源
        最近更新 更多