Differences Between @api.autovacuum and Cron Jobs in Odoo


✅ Overview


Aspect

@api.autovacuum

Cron Job (ir.cron)

Purpose

Background maintenance & cleanup tasks

Scheduled operations or business processes

Configuration

Hardcoded (decorator-based, no UI control)

Configurable via UI (Settings > Technical)

Flexibility

Limited (no custom timing via UI)

Highly flexible (timing, retries, logging)

Use Cases

Auto-cleaning expired data, temp records, etc.

Sending emails, scheduled reports, syncing

Logging

❌ No logging by default

✅ Yes, with last run, next run, traceback

Multi-database aware

✅ Yes

✅ Yes

Triggered by

odoo-bin's internal vacuum thread

ir.cron scheduler in Odoo



📌 What is @api.autovacuum?


A special Odoo decorator used for automatic, low-level cleanup tasks, typically registered internally by Odoo core modules.


Example


from odoo import models, api

from datetime import timedelta

class SessionGC(models.AbstractModel):

    _name = 'session.gc'

    _description = 'Session Garbage Collector'

    @api.autovacuum

    def _gc_sessions(self):

        expired = self.env['session'].search([

            ('last_seen', '<', fields.Datetime.now() - timedelta(days=7))

        ])

        expired.unlink()


  • No need to define ir.cron.
  • Executed internally when vacuum thread runs.
  • Used in modules like base, mail, etc.


📌 What is ir.cron?

A model used to define scheduled server actions in Odoo.


Example


<record id="model_task_auto_close" model="ir.cron">

    <field name="name">Auto Close Tasks</field>

    <field name="model_id" ref="model_project_task"/>

    <field name="state">code</field>

    <field name="code">model._auto_close_tasks()</field>

    <field name="interval_number">1</field>

    <field name="interval_type">days</field>

    <field name="numbercall">-1</field>

</record>


  • Can be managed from the UI.
  • Has logs, failure notifications, retry logic.
  • Better suited for business-level automation.


✅ Summary Table


Criteria

@api.autovacuum

Cron Jobs (ir.cron)

Intended for

Internal cleanup/garbage collection

Business automation

Configurable by user

❌ No

✅ Yes

Logging & monitoring

❌ No

✅ Yes

Flexibility (timing, code)

❌ Limited

✅ High

Common use in Odoo

Expiring tokens, logs, sessions

Reports, auto follow-ups




🔍 When to Use What?

Use Case

Recommended Approach

Remove expired auth tokens

@api.autovacuum

Auto-close stale tickets every night

ir.cron

Cleanup expired job queue entries

@api.autovacuum

Notify users of upcoming deadlines

ir.cron

Recompute dynamic KPIs nightly

ir.cron