用于重复后台作业的延迟作业、守护进程或其他 gem
Posted
技术标签:
【中文标题】用于重复后台作业的延迟作业、守护进程或其他 gem【英文标题】:delayed_job, daemons or other gem for recurring background jobs 【发布时间】:2011-09-09 19:41:58 【问题描述】:我需要构建一个后台作业,它会遍历 RSS 提要列表并每隔 10 分钟分析一次。
我一直在使用delayed_job 来处理后台作业,我非常喜欢它。我相信虽然它不是为经常性的后台工作而构建的。我想我可以在每个人结束时自动安排后台作业(也许使用 begin..rescue 只是为了确保它得到执行)。或者预先安排一个月的工作,然后再安排一个每月重新安排的工作..等等
当我开始问自己时,这引起了我的一些担忧:如果服务器在执行过程中出现故障并且作业没有安排好怎么办?
我还查看了 Daemons gems,它看起来像是运行带有启动/停止命令的简单 Ruby 脚本。我喜欢delayed_job 安排和处理重试的方式。
在这种情况下,您建议使用什么?您认为设计这种具有重复性后台工作的系统的最佳方法是什么?您还知道我可以监控该后台进程并在它停止时收到通知的方法吗?
【问题讨论】:
【参考方案1】:我刚刚为一个类似的任务实现了delayed_job(使用:run_at => 2.days.from_now
),并发现它非常适合。处理您对流程失败的担忧的最简单方法是在作业的第一步创建下一个作业。此外,您可以创建与delayed_job
模型的has_many
关系,这将允许您访问:last_error
。或者,查看readme 的“Hooks”部分,它有一个完美的失败示例。
【讨论】:
【参考方案2】:我认为这是一个类似的问题:A cron job for rails: best practices? - 不仅有答案,还有关于 rails 中后台作业的 railscast 链接。
我使用了 cron +delayed_job,但计划任务应该每天运行几次,大部分只运行一次。
【讨论】:
【参考方案3】:看看 SimpleWorker。这是一个弹性调度和后台处理工作队列。它基于云,具有持久性和冗余性,因此您无需担心服务器出现故障或重新启动。
在调度方面非常灵活,对队列中的作业提供了很好的自省以及状态和错误通知。
全面披露:我在 SimpleWorker 工作。
【讨论】:
以上是关于用于重复后台作业的延迟作业、守护进程或其他 gem的主要内容,如果未能解决你的问题,请参考以下文章