Skip to content

Odoo Systemd Service Configuration: Complete Guide

DeployMonkey Team · March 23, 2026 7 min read

Systemd Service for Odoo

A properly configured systemd service ensures Odoo starts on boot, restarts on failure, and integrates with system logging. This guide covers the complete systemd setup for production Odoo deployments.

Basic Unit File

# /etc/systemd/system/odoo.service
[Unit]
Description=Odoo 19 ERP
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
User=odoo
Group=odoo
ExecStart=/opt/odoo/venv/bin/python3 \
  /opt/odoo/odoo-server/odoo-bin \
  --config=/etc/odoo.conf
WorkingDirectory=/opt/odoo
StandardOutput=journal+console
StandardError=journal+console

[Install]
WantedBy=multi-user.target

Production Hardening

# Enhanced security directives:
[Service]
# Restart on failure
Restart=on-failure
RestartSec=5
StartLimitBurst=5
StartLimitIntervalSec=60

# Resource limits
LimitNOFILE=65536
LimitNPROC=4096
MemoryMax=4G
MemoryHigh=3G
CPUQuota=200%

# Security hardening
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
NoNewPrivileges=true
ReadWritePaths=/var/log/odoo /opt/odoo/.local
ReadOnlyPaths=/opt/odoo/odoo-server

Environment Variables

# Pass secrets via environment file
# /etc/odoo/odoo.env (chmod 600)
DB_PASSWORD=secure_database_password
ADMIN_PASSWD=secure_admin_password

# Reference in unit file:
[Service]
EnvironmentFile=/etc/odoo/odoo.env

# Or inline:
Environment="ODOO_RC=/etc/odoo.conf"
Environment="PYTHONUNBUFFERED=1"

Logging with Journald

# View Odoo logs
journalctl -u odoo.service -f
journalctl -u odoo.service --since "1 hour ago"
journalctl -u odoo.service -p err

# Or use Odoo's logfile directive in odoo.conf:
# logfile = /var/log/odoo/odoo.log
# logrotate = True

# Combined approach:
# logfile for persistent logs
# journald for systemctl status output

Multi-Instance Setup

# Template unit for multiple instances:
# /etc/systemd/system/[email protected]
[Unit]
Description=Odoo 19 Instance %i
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
User=odoo
Group=odoo
ExecStart=/opt/odoo/venv/bin/python3 \
  /opt/odoo/odoo-server/odoo-bin \
  --config=/etc/odoo/odoo-%i.conf
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

# Usage:
# systemctl start odoo@production
# systemctl start odoo@staging
# Each uses /etc/odoo/odoo-production.conf etc.

Common Commands

# Enable and start
sudo systemctl daemon-reload
sudo systemctl enable odoo
sudo systemctl start odoo

# Check status
sudo systemctl status odoo

# Reload config without restart (SIGHUP)
sudo systemctl reload odoo

# Stop gracefully
sudo systemctl stop odoo

# View resource usage
systemd-cgtop

DeployMonkey

DeployMonkey manages Odoo services automatically with proper systemd configuration, auto-restart, resource limits, and log management built in.