0

我的初始化程序/task_scheduler.rb

require 'rubygems'
require 'rufus/scheduler'

scheduler = Rufus::Scheduler.start_new

scheduler.cron '*/5 * * * *' do
  Project.cron_for_report
end

我的问题是我每 5 分钟收到 12 封报告邮件。我应该每 5 分钟只收到 1 封邮件。我应该使用互斥锁之类的东西吗?请给出一些示例代码。

请帮忙。

提前致谢。

4

1 回答 1

1

这听起来不像是一个 rufus-scheduler 问题,听起来你正在运行 12 个 Rails 进程,但你不知道你在什么上运行 Rails(独角兽、乘客……?)。

由于您在 Ubuntu 上运行,因此您可以自由使用 crond。你为什么不看看https://github.com/javan/whenever?它可以让您从 Rails 应用程序中利用 crond 的优势。

Rufus-scheduler 很有趣,但是如果您只是在每次 Rails 启动时启动它,您最终会为每个 Rails 进程创建一个 rufus-scheduler 实例,除非您在初始化程序中放置一些逻辑以避免这种情况(锁定文件, ETC)。而且您的逻辑必须足够聪明,以避免锁定指向死调度程序,从而阻止启动新的、需要的、调度程序等。

由于您在 Linode/Ubuntu 上部署,因此您可以自由考虑其他替代方案,例如无论何时。

对不起,没有示例代码,我不希望你成为一个复制粘贴程序员。

于 2013-06-14T22:31:39.070 回答