跳至内容

Odoo 19 Cron 治理:错峰、锁与积压监控

ir.cron 治理:错峰、互斥锁与积压监控
2025年12月7日
Odoo 19 Cron 治理:错峰、锁与积压监控

计划动作积压会拖垮 Odoo 19 白天交互:用户觉得「系统卡」,其实是 ir.cronnextcall 过期队列在抢锁打满 CPU。运维要把「过期 cron 数」当成核心指标;长任务拆队列;并行用锁挡住。本文给出盘点方法、错峰策略、锁与幂等、监控报表。

盘点

设置 → 技术 → 自动化 → 计划的动作。看间隔、下次执行、执行用户、代码是否触碰重模型(会计过账、全量重算)。优先处理 nextcall 已过期仍堆积的条目;禁用无人认领的老脚本。

错峰

报表汇总、附件清理、邮件队列、对账放到低峰;白天只留短任务。多 cron 抢锁时,重任务改成「入队 + worker 消费」。避免全部挤在整点 00 分。

锁与幂等

长任务开头用数据库锁或「运行中」标记;失败指数退避。业务写入必须幂等:重复跑不产生第二张发票/第二笔 stock.move。与自定义 cron 文同一原则,只是治理视角偏运维。

监控

日报:过期数量、单次最长耗时、失败次数。超阈值告警到运维频道;月度回顾谁的脚本最耗时。

验收标准

  • 人为暂停后恢复,业务单据不重复。
  • 低峰任务不在上班高峰打满 CPU。
  • 过期 nextcall 有看板或日报。

Cron 责任人制度

每条启用的 ir.cron 在描述或文档表登记:业务用途、责任人、可接受最长耗时、 失败影响面。无责任人的 cron 默认禁用。周报看过期 nextcall 数量与 Top 耗时; 超过阈值的脚本要么拆队列,要么改间隔。手工「立即运行」生产 cron 需双人复核, 尤其是会生成 account.move 或批量邮件的任务。

对「全表重算」类 cron 强制加锁并改到凌晨;白天只允许增量。

积压爆发时的应急步骤

1)列出 nextcall 过期的 ir.cron Top N;2)暂停非关键重任务; 3)保证短任务与用户交互恢复;4)低峰再放行重任务或改入队;5)复盘为何堆积(发版后新脚本?锁等待?外部慢)。 日常用只读 SQL/报表看平均时长。禁止在生产对重 cron 连续点「立即运行」。责任人制度见上文, 无主责脚本禁用。

数据库维护窗口与 cron 错峰,避免 VACUUM/备份与全表重算重叠。

cron 变更纳入发版说明,禁止生产库临时改 interval 却不记单。

预生产勾选表需覆盖文章编号 327 全部验收点后再约生产窗口。

将文章编号 327 的配置变更记入发版说明,便于回滚对照。

将文章编号 327 的配置变更记入发版说明,便于回滚对照。

将文章编号 327 的配置变更记入发版说明,便于回滚对照。

将文章编号 327 的配置变更记入发版说明,便于回滚对照。

应急与发版联动

积压应急:暂停重任务、保交互、低峰回放。cron 变更写进发版说明。无主责禁用。 禁止生产连续「立即运行」重任务。全表重算仅凌晨。维护窗口与备份错峰。 周报 Top 耗时脚本约谈责任人,能拆队列的拆。

落地备忘(327-0):把本文验收项做成检查表,预生产逐条勾选并附截图;生产窗口前提交负责人签字。相关模型与字段以当前 Odoo 19 实例开发者模式显示为准。

落地备忘(327-1):把本文验收项做成检查表,预生产逐条勾选并附截图;生产窗口前提交负责人签字。相关模型与字段以当前 Odoo 19 实例开发者模式显示为准。

落地备忘(327-2):把本文验收项做成检查表,预生产逐条勾选并附截图;生产窗口前提交负责人签字。相关模型与字段以当前 Odoo 19 实例开发者模式显示为准。

中国Odoo网|对照 Odoo 19 企业版 Cron 治理:盯 nextcall 积压,错峰与互斥,长任务拆队列。

Odoo 19 Cron 治理:错峰、锁与积压监控
2025年12月7日
存档