delayed_job,守护进程或其他宝石用于重复的后台工作

时间:2011-06-07 06:29:08

标签: ruby-on-rails backgroundworker daemon delayed-job

我需要构建一个后台作业,通过RSS源列表进行分析,然后每隔10分钟分析一次。

我一直在使用delayed_job来处理后台工作,我非常喜欢它。我相信它不是为经常性的后台工作而建的。我想我可以在每个人的最后自动安排后台工作(也许只有begin..rescue以确保它被执行)。或者预先安排说一个月提前工作的价值,并有另一个每月重新安排的工作......等等。

当我开始问自己时,这引起了一些人的关注:如果服务器在执行过程中出现问题并且作业没有安排好怎么办?

我还看过Daemons gems,它看起来像运行带有启动/停止命令的简单Ruby脚本。我喜欢delayed_job安排和处理重试的方式。

在这种情况下,您建议使用什么?您认为设计具有重复后台作业的系统的最佳方式是什么?你也知道我可以监控后台进程的方法,如果它停止会得到通知吗?

3 个答案:

答案 0 :(得分:2)

我刚刚为类似任务实施了delayed_job(使用:run_at => 2.days.from_now)并发现它非常合适。解决流程失败问题的最简单方法是创建下一个工作的第一步。此外,您可以与has_many模型建立delayed_job关系,以便您访问:last_error。或者,看看readme的“Hooks”部分,它有一个完美的失败示例。

答案 1 :(得分:1)

我认为这是一个类似的问题:A cron job for rails: best practices? - 不仅有答案,还有关于rails中后台作业的railscast的链接。

我使用了cron + delayed_job,但计划的任务应该每天运行几次,大多数只运行一次。

答案 2 :(得分:0)

看看SimpleWorker。它是一个弹性调度和后台处理工作队列。它基于云,具有持久性和冗余性,因此您不必担心服务器是否停机或重新启动。

在调度方面非常灵活,可以很好地反省队列中的作业以及状态和错误的通知。

完全披露:我在SimpleWorker工作。