【问题标题】:whenever gem is not working for every 2 seconds每当 gem 每 2 秒不工作时
【发布时间】:2016-05-09 09:32:25
【问题描述】:

我已经为我的后端 crons 作业实现了 gem,当我尝试类似的东西时效果很好

every 2.seconds do
  rake "my:rake:task"
end

我收到此错误

`parse_time': Time must be in minutes or higher (ArgumentError)

我真的很想每隔几秒就运行一次这个任务,我该怎么做呢。

【问题讨论】:

  • 你的 rake 任务是做什么的?
  • 它向第三方 API 发送两个请求

标签: ruby ruby-on-rails-3 ruby-on-rails-4 whenever


【解决方案1】:

whenever gem 无法做到这一点。

在底层,whenever gem 只是创建了一个cron job。这些只能以每分钟的最小粒度进行配置。

可以做的是编写一个带有无限循环的 shell 脚本来运行您的任务,然后休眠 2 秒。但是,我建议不要这样做 - 运行这种经常感觉不对的东西。可能有一种更清洁的方法,例如将您的代码作为after_save 钩子运行?

【讨论】:

    【解决方案2】:

    您收到错误是因为this 是原因

    Cron 只允许至少一分钟。你可以做的是编写一个带有无限循环的 shell 脚本来运行你的任务,然后休眠 2 秒。这样,您的任务将或多或少每 2 秒运行一次,具体取决于任务本身需要多长时间。

    听起来你确实在做一些你可能不应该做的事情

    循环播放

    while true ; do cd /home/myrailsapp && rake my:rake:task & ; sleep 2; done
    

    或者 conrtab 看起来像这样

    /home/myrailsapp/rakescript.sh

    cd /home/myrailsapp && rake my:rake:task
    

    在玉米标签中

    * * * * * /home/myrailsapp/rakescript.sh
    * * * * * sleep 2; /home/myrailsapp/rakescript.sh
    * * * * * sleep 4; /home/myrailsapp/rakescript.sh
    * * * * * sleep 6; /home/myrailsapp/rakescript.sh
    

    【讨论】:

    • 这应该是对另一个答案的评论。
    【解决方案3】:

    带有 rails runner 的循环可以正常工作:

    loop {
      Ball.update_all_positions
      sleep 2
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 2011-11-24
      • 2013-11-12
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多