Skip to main content

Troubleshooting

Organised by what you see, not by what is broken.

First moves

Local only
# odoocli server info
Local only
# docker ps
Local only
# docker logs odoo-api --tail 200

For anything that was started from the console or by a schedule, the Jobs page is a better starting point than any log: every operation captures its own.

Installation

SymptomCause and fix
No Odoo server configuration exists on server installodoo.json is still the scaffold. Run odoocli server config create --preset production first
server update or server upgrade refuses to runYou ran it inside a container. It recreates the API's own container, so it must run on the host
Installation succeeds but no mail is sentNo SMTP profile was configured, so the Postfix container was not installed. This is a warning, not a failure

The console and the API

SymptomCause and fix
Every API call returns 401The console's key does not match any of the API's. Re-run server install, or server apikey rotate, then update remote clients
Every API call returns 503odoo.json failed to load. Check the API's health endpoint and the odoo-api log
The console says the API is unreachableodoo-api is not running or not listening on 5210
A configuration change had no effectodoo.json is read once at API startup. Restart odoo-api
Passkey registration fails, password sign-in worksYou reached the console by IP address. Use the host name: a relying-party id must be a domain
Nobody can sign inReset from the host with odoocli user password-reset, user totp-disable or user unlock

Instances

SymptomCause and fix
Certificate request failsDNS does not point here, or port 80 is not reachable. Check with instance config validate-dns
A fresh 15.0 or 16.0 instance will not initialise a databaseThose versions reject an empty addons path. Antelao omits the path entirely until a module exists; if you added one by hand, remove it
An instance runs but cannot writeTry instance repair filesystem
A rebuilt image is still broken after pulling againdocker pull reuses the existing local layer. Remove the image and prune the builder cache, then pull
Odoo container image for version X was not foundThe container and image ids disagree, or the instance still refers to an image tagged under an older product name. Re-tag rather than rebuild
An applied configuration change did nothingSome settings need the container recreated, not restarted. Bind mounts, addons paths in particular

Jobs

SymptomCause and fix
A job is stuck at QueuedAnother job holds the instance, or a server-level job is draining the queue. Both are by design
A job is InterruptedThe API restarted while it ran. It is not retried automatically because half-done work can be destructive. Read its log and decide
A job failed naming an editionA licensing denial. It names the capability, not the code. See Editions
A generated password is not shown any moreIt is revealed once, briefly, and then gone. Reset it

Backups

SymptomCause and fix
Backups run but nothing reaches S3 or AzureEither the credentials are wrong, or the licence lapsed. A lapse skips cloud targets and records a failed result per target, while local and FTP copies still run. Check the job result per target
Scheduled backups stopped silentlyThe scheduler needs Professional. An expired subscription stops unattended runs while manual ones keep working
A schedule did not fire after an outageThe scheduler does not catch up. Run it by hand for the missed window
An instance is not covered by the server-wide sweepIt holds its own schedule of that type, which excludes it from the sweep. Remove the per-instance schedule to return it

Licensing

SymptomCause and fix
A licence worked for two weeks and then stoppedIt was never activated. An unactivated licence runs on a non-renewable 14-day window from first sight. Activate it against this server's challenge
A licence installs and is refused immediatelyIt is bound to a different machine. The activation window is only for a licence never activated anywhere
A previously working licence stoppedThe hardware changed, the check-in grace window ended, the clock was rolled back, or the licence does not cover this product version. The Licence page names which
The server unregisters after a hardware or hypervisor changeThe challenge changed. Reactivate
The Licence page reports the state file is unwritableThe licence directory is read-only. The grace window still ends, but the anchor is only in memory

Fail2Ban

SymptomCause and fix
Bans are listed but attacks continueAlmost certainly a reverse proxy in front of nginx. See the trusted-proxy warning in Fail2Ban; check the f2b-<jail> chain counters, not the ban list
A ban has no instanceJails are server-wide. The instance is derived from the database named in the match, and not every jail carries one
You banned yourselfodoocli server fail2ban unban works at every edition, including unregistered, precisely for this

Upgrades

SymptomCause and fix
An older binary refuses to start after a rollbackThe master schema upgrade is forward-only. Restore the master database from before the upgrade

Diagnostics worth keeping to hand

Local only
# docker logs odoo-web --tail 200
Local only
ls -t /root/.local/share/odoocli/logs/ | head
Local only
# odoocli server info --show-secrets