Odoo Cron Jobs: Monitoring Scheduled Actions for Reliability

Silent cron failures are one of the most common causes of Odoo outages. Learn how to monitor scheduled actions, detect failures early, and prevent data processing backlogs.

a close up of a black object with neon lights
Photo by Almas Salakhov on Unsplash

Odoo's scheduled actions (ir.cron) are the backbone of background processing — email queues, inventory computations, accounting reconciliation, and dozens of other critical operations run as cron jobs. When they work, nobody notices. When they fail, the symptoms can take hours or days to become apparent.

Why Cron Failures Are Dangerous

Unlike a server crash or a web error that triggers immediate alerts, cron failures are silent. The job stops running, but Odoo doesn't surface an obvious error. Instead:

  • Emails stop sending, but users only notice when a client asks "did you get my email?"
  • Inventory computations fall behind, causing stock discrepancies that surface during fulfillment
  • Accounting reconciliation queues grow unbounded, eventually causing timeouts
  • Report generation stops, and users assume the data is "still loading"

By the time someone investigates, there's a processing backlog that can take hours to clear. For critical operations like payroll or invoicing, the business impact is immediate and expensive.

📊 Curious about your Odoo instance health? Try the free NonaGuard health check — results in 60 seconds, no signup required.

Common Cron Issues

1. Exhausted Run Counts

Some scheduled actions are configured with a maximum run count (numbercall). When they hit the limit, they silently stop. This is by design — but if nobody checks, critical jobs can go dormant.

2. Error Loops

A cron job that encounters a transient error (database lock, network timeout) may enter a failure loop where it tries, fails, and retries indefinitely. Each failure consumes system resources and fills logs, but the actual processing never completes.

3. Interval Drift

Cron jobs configured with large intervals (e.g., "every 4 hours") can drift if the job takes longer than expected. If a 4-hour job takes 5 hours to complete, the next run starts late, and the delay compounds over time.

4. Disabled Critical Jobs

During debugging, developers sometimes disable cron jobs temporarily and forget to re-enable them. We've seen production instances with email sending disabled for weeks because someone was debugging an unrelated issue.

What to Monitor

For each scheduled action, track:

  • Last execution time — Is it running on schedule?
  • Execution duration — Is it taking longer than expected?
  • Error count — Is it failing? How often?
  • Active status — Is it enabled?
  • Remaining runs — Is it approaching its run limit?

NonaGuard's cron health scanner checks all of these metrics automatically. It detects stuck jobs, failing jobs, disabled critical jobs, and interval drift — then flags them in your Pulse Score with actionable recommendations.

Best Practices

  1. Set numbercall to -1 for jobs that should run indefinitely (like email queue processing)
  2. Use appropriate intervals — Don't run heavy jobs every minute when every hour would suffice
  3. Log execution times — Track how long each cron job takes so you can spot degradation early
  4. Separate heavy and light jobs — Use dedicated Odoo workers for heavy background processing
  5. Monitor externally — Don't rely on Odoo to monitor its own cron health; use an external tool like NonaGuard

Run a free cron health check and see if any of your scheduled actions are silently failing.

📡 Get Your Pulse Score

NonaGuard provides continuous Odoo health monitoring with a 0-100 Pulse Score. Know exactly where your instance stands — no guesswork, no manual audits.

Get Your Free Health Check →