每当宝石不是每2秒钟工作一次

时间:2016-05-09 09:32:25

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

我已经实现了我的后端crons工作的宝石,当我尝试类似

时工作正常
every 2.seconds do
  rake "my:rake:task"
end

我收到此错误

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

我真的想在每几秒后运行这个任务,我该怎么办呢。

3 个答案:

答案 0 :(得分:4)

您无法使用whenever gem。

执行此操作

引擎盖下,whenever gem只会创建一个cron job。这些只能以每分钟的最小粒度进行配置。

可以做的是写一个带有无限循环的shell脚本来运行你的任务,然后睡2秒钟。但是,我会反对它 - 运行这种经常出错的东西。可能有一个更清洁的方法,例如将代码作为after_save挂钩运行?

答案 1 :(得分:1)

您收到错误是因为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
在corntab中

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

答案 2 :(得分:0)

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

loop {
  Ball.update_all_positions
  sleep 2
}