Better Scheduled Actions Monitor
Enterprise-grade visibility into Odoo Scheduled Actions — catch failures instantly, track performance trends, and keep cron reliable.
What is this module?
Odoo's built-in Scheduled Actions (ir.cron) run silently in the background. When they fail, degrade, or stop executing — you find out from an angry user, not from the system. Better Scheduled Actions Monitor fixes that.
Every cron execution — whether it succeeds, fails, or takes unusually long — is automatically captured in a dedicated log. A real-time health dashboard gives administrators an instant overview. Alert rules (Pro) notify your team before problems become incidents.
Features
Health Dashboard
OWL-powered live dashboard showing active jobs, failures in last 24 h, running jobs, average runtime, success rate, top slow & top failing jobs.
Execution Log
Every cron run captured: start time, end time, duration, worker, database, status (success / failed / running), and full error message & traceback on failure.
Failure Capture
Failures automatically stored with Python traceback. Never lose visibility on why a scheduled action crashed.
Re-run Action
Re-trigger any scheduled action directly from the execution log with a single button click — no need to navigate to Technical settings.
Filters & Search
Pre-built filters (Failed, Running, Success, Today, Last 7 Days) and group-bys (by Cron, Status, Date) for quick analysis.
PDF & CSV Reports
Generate a QWeb PDF Health Report or export execution data to CSV with a date-range export wizard.
Alert Rules (Pro)
Configure alert rules for consecutive failures, runtime threshold exceeded, cron disabled, or missed execution intervals.
Role-Based Access
Three security groups: Viewer (read-only), Manager (manage alerts), Administrator (full access including re-run and export).
Near-Zero Overhead
Logging uses a separate database cursor and try/except isolation — monitoring never impacts the cron job itself (< 5 ms overhead per execution).
Health Dashboard
Navigate to Cron Monitor → Dashboard for a live overview.
| Widget | Description |
|---|---|
| Total Active Jobs | Count of all active ir.cron records |
| Failed Jobs (24h) | Execution failures in the last 24 hours |
| Running Jobs | Executions currently in "running" state |
| Average Runtime (s) | Mean duration across last 500 finished executions |
| Success Rate | % of success across last 500 finished executions |
| Top Slow Jobs | 5 executions with longest duration (successful runs) |
| Top Failing Jobs | 5 cron names with highest failure count |
Execution Log
Navigate to Cron Monitor → Execution Log.
Every scheduled action run is stored with full context. The list view uses color coding: ■ red = failed, ■ green = success, ■ blue = running.
Columns
| Column | Description |
|---|---|
| Cron Name | Name of the scheduled action |
| Status | running / success / failed |
| Start Time | When execution began |
| End Time | When execution completed |
| Duration (s) | Elapsed seconds (auto-computed) |
| Worker | Odoo worker process identifier |
| Database | Database name (useful for multi-db setups) |
| Error Summary | First line of error message on failure |
Built-in Filters
| Filter | Description |
|---|---|
| Failed | Only failed executions |
| Running | Currently in-progress executions |
| Success | Completed successfully |
| Today | Executions from today only |
| Last 7 Days | Default filter — last week of activity |
Group By
Group results by Cron Name, Status, or Execution Date for trend analysis.
Form View — Failure Details
Open any failed execution to see the full error message and Python traceback under the "Error Details" tab. Use the Re-run button to immediately re-trigger the cron.
Stat Button on Scheduled Actions
Open any Scheduled Action (Technical → Automation → Scheduled Actions) and use the Execution History smart button to jump directly to that cron's log.
Alert Rules
Navigate to Cron Monitor → Alert Rules (requires Manager role).
Alert rules define conditions that should trigger notifications. The alert engine is designed for Pro-tier extension — rules and notification records are fully CRUD-manageable from the UI.
| Field | Options / Description |
|---|---|
| Rule Type | Consecutive Failures / Runtime Exceeded / Cron Disabled / Not Executed Within Interval |
| Threshold | Numeric value (e.g. 3 failures, or 60 seconds runtime) |
| Channel | Email / Slack / Microsoft Teams / Generic Webhook |
| Priority | Low / Medium / High |
| Active | Toggle to enable/disable rule |
Reports & Export
PDF Health Report
Select one or more records in the Execution Log list, then use Print → Health Report to generate a QWeb PDF showing all selected executions with cron name, status, timestamps, and duration.
CSV Export Wizard
Navigate to Cron Monitor → Export Report. Choose an optional date range and click Export CSV to download a spreadsheet with all execution data for analysis in Excel or Google Sheets.
Exported columns: Cron, Status, Start, End, Duration (s), Worker, Database, Error.
Installation
Copy module to addons path
Place the cron_monitor folder inside any addons path listed in your odoo.conf:
/your_addons_path/
└── cron_monitor/
├── __manifest__.py
├── models/
├── views/
└── ...
Update apps list
In Odoo UI: Settings → Apps → Update Apps List (enable developer mode first), or via CLI:
python odoo-bin -c odoo.conf -u base --stop-after-init
Install module
Search for "Better Scheduled Actions Monitor" in Apps and click Install, or via CLI:
python odoo-bin -c odoo.conf -i cron_monitor --stop-after-init
Assign user access
Go to Settings → Users, edit a user, and assign one of:
| Group | Can Do |
|---|---|
| Cron Monitor / Viewer | Read dashboard and execution log |
| Cron Monitor / Manager | Viewer + manage alert rules and notifications |
| Cron Monitor / Administrator | Full access including re-run and export |
The Odoo Administrator user gets Administrator group automatically on install.
Verify installation
After install a "Cron Monitor" menu appears in the top navigation bar. Click it to open the Health Dashboard. Go to any Scheduled Action form view — you'll see an Execution History button. Trigger a cron manually (Run Manually) and confirm a new execution record appears in the log.
Dependencies & Compatibility
| Item | Value |
|---|---|
| Odoo Version | 17.0 |
| Module Dependencies | base, mail, web (all standard Odoo modules) |
| Python Dependencies | None (uses stdlib only) |
| Database | PostgreSQL 12+ |
| License | OPL-1 |
How It Works
The module inherits ir.cron and wraps two methods:
_callback— called by the Odoo cron scheduler for every scheduled executionmethod_direct_trigger— called when a user clicks "Run Manually"
Both wrappers open a separate database cursor to write the execution record. This isolation means a rollback in the cron job's own transaction never loses the monitoring data. The try/except in the logging helpers ensures a logging failure can never crash the cron job.
ir.cron._callback / method_direct_trigger
│
├─ [separate cursor] cron.monitor.execution.create(status=running)
│
├─ super() → actual cron action runs
│
└─ [separate cursor] execution.write(status=success|failed, end_time, duration, traceback)
A composite SQL index on (cron_id, start_time) is created at install
to keep log queries fast even with millions of records.
Security Model
| Model | Viewer | Manager | Administrator |
|---|---|---|---|
| cron.monitor.execution | Read | Read / Write | Full |
| cron.monitor.alert.rule | Read | Full | Full |
| cron.monitor.notification | Read | Read / Write / Create | Full |
| Export Wizard | — | Full | Full |
Edition Tiers
Lite (This Module)
- Health Dashboard
- Full Execution Log
- Failure & Traceback Capture
- Re-run Action
- Filters & Group-by
- PDF & CSV Reports
- Alert Rules CRUD
- 3 Security Groups
- Email / Slack Alerts
- Runtime Trend Charts
- Multi-DB Monitoring
Pro
- Everything in Lite
- Email Alert Delivery
- Slack Webhook Integration
- Teams Webhook Integration
- Runtime Trend Charts
- Historical Analytics
- Slow Job Detection
- Multi-DB Monitoring
- Anomaly Detection
Enterprise
- Everything in Pro
- Multi-Database Hub
- Anomaly Detection
- Forecasting
- Central Monitoring Dashboard
FAQ
Does this slow down my cron jobs?
No. Logging uses a separate cursor opened outside the cron transaction. The overhead is under 5 ms per execution. If the logging itself fails, the cron job continues normally — the exception is swallowed and logged to the Odoo log file only.
What happens to old execution records?
Records accumulate until manually deleted. For high-volume cron setups, add an archive policy
or create a scheduled action that deletes cron.monitor.execution records older than
N days. A built-in auto-archive policy will be added in a future version.
Can I re-run a failed job?
Yes. Open the execution log record and click Re-run.
This calls ir.cron.method_direct_trigger() on the linked cron,
which also produces a new execution log entry.
Does it capture cron jobs that were already installed before?
Yes. The wrapper is applied to all existing ir.cron records immediately on install —
no changes needed to existing crons.
Does it work with multi-company / multi-database setups?
Each database has its own execution log. The database_name field is recorded
on every execution for reference. A multi-database central hub is planned for the Enterprise tier.
Upgrading
To upgrade to a new version of the module:
python odoo-bin -c odoo.conf -u cron_monitor --stop-after-init
All existing execution log records are preserved. New database columns (if any) are added automatically by Odoo's ORM migration system.
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 615 |
| Technical Name |
cron_monitor |
| License | OPL-1 |
| Website | https://pushpendra-odoo.in |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module