Se rendre au contenu

Linux pour le dev Odoo : 30 commandes pour reprendre la main sur sa sandbox

Série Tech · Article 1/5 · Boîte à outils Linux du dev Odoo
14 mai 2026 par
Linux pour le dev Odoo : 30 commandes pour reprendre la main sur sa sandbox
B.Mustapha
| Aucun commentaire pour l'instant

Linux pour le dev Odoo : 30 commandes pour reprendre la main sur sa sandbox

Le développeur Odoo qui démarre sa sandbox sur Ubuntu sait lancer ./odoo-bin, mais dès qu'il faut suivre un log en temps réel, tuer un worker bloqué, repérer un port occupé ou réajuster les droits du filestore, l'arsenal Linux devient indispensable. Cet article rassemble les trente commandes que tout dev Odoo doit avoir en mémoire musculaire — classées par cas d'usage réel. Pas de cours système exhaustif : uniquement ce qui sert au quotidien sur une sandbox Odoo 19 sous Ubuntu 24.04 LTS.

Cet article ouvre la série S01 — Boîte à outils Linux du dev Odoo, cinq épisodes consacrés aux fondamentaux Linux, Git, Bash, odoo-bin shell et PostgreSQL appliqués à un environnement Odoo 19. Le présent épisode pose la base système. Les suivants empilent les couches outillage et données.

📦 Paquets optionnels — tree, locate, htop

Trois commandes utilisées dans cet article ne figurent pas dans une installation Ubuntu 24.04 minimale. Si le shell répond command not found, le paquet correspondant s'installe en une ligne :

sudo apt install tree      # arborescence visuelle (section 1)
sudo apt install plocate   # fournit locate + updatedb (section 3)
sudo apt install htop      # moniteur de processus interactif (section 4)

Après l'installation de plocate, lancer sudo updatedb une première fois pour construire l'index du système de fichiers. Les commandes cœur — ls, cd, grep, find, ps, kill, chmod, chown, systemctl, journalctl, ssh, scp, rsync — sont présentes sur toute installation Ubuntu standard, aucun paquet supplémentaire requis.

1. Naviguer et inspecter une arborescence Odoo

Toute sandbox Odoo se résume à trois répertoires clés : les sources du moteur (./odoo/), les addons custom (./addons/), et le filestore par utilisateur système (~/.local/share/Odoo/filestore/). Cinq commandes suffisent à s'y déplacer sans hésitation.

# Se déplacer dans la sandbox
cd ~/odoo-dev

# Lister le contenu avec tailles humaines et fichiers cachés
ls -lah

# Afficher le chemin courant (utile dans les scripts)
pwd

# Afficher l'arborescence sur 2 niveaux
tree -L 2 addons/

# Suivre un fichier de log et naviguer dans le flux
less +F /var/log/odoo/odoo.log

L'option +F de less ouvre le fichier en mode follow, équivalent visuel de tail -f, mais avec la possibilité d'appuyer sur Ctrl+C pour reculer dans l'historique, puis F pour reprendre la lecture. Un gain net quand le log défile vite pendant une install de module volumineux.

📖 Définition — Le filestore Odoo

Le filestore est le répertoire qui stocke les pièces jointes binaires hors base PostgreSQL (images produit, PDF de factures, exports). Sur Ubuntu, son chemin par défaut est ~/.local/share/Odoo/filestore/<nom_base>/. Chaque base de données dispose de son propre sous-répertoire. La table ir_attachment conserve les métadonnées, mais les octets vivent sur disque. Une perte du filestore sans sauvegarde équivaut à une perte des pièces jointes — la base seule ne suffit pas pour une restauration complète.

2. Suivre les logs Odoo en temps réel

Le diagnostic d'une installation de module ratée passe presque toujours par la lecture du log Odoo pendant son exécution. Quatre commandes couvrent l'essentiel des cas, selon que le serveur tourne en service systemd ou en mode dev direct.

# Suivre le log Odoo en temps réel
tail -f /var/log/odoo/odoo.log

# Filtrer ERROR et WARNING à la volée (--line-buffered force le flush ligne par ligne)
tail -f /var/log/odoo/odoo.log | grep --line-buffered "ERROR\|WARNING"

# Suivre via systemd-journal quand Odoo tourne comme service
journalctl -fu odoo.service

# Naviguer librement dans le flux (avant/arrière) avec less
less +F /var/log/odoo/odoo.log

L'option --line-buffered de grep est essentielle : sans elle, la sortie est mise en buffer par bloc de 4 ko et les erreurs apparaissent avec plusieurs secondes de retard. Côté Odoo 19, les options --logfile, --log-web (DEBUG sur odoo.http) et --log-sql (DEBUG sur odoo.sql_db) restent inchangées par rapport à la v18. Activer --log-sql ponctuellement permet de voir chaque requête SQL générée par l'ORM — précieux pour traquer un N+1 dans un compute lent.

Terminal Ubuntu affichant tail -f sur odoo.log pendant l'installation d'un module, avec lignes INFO en gris et ERROR en rouge
Figure 1 — La commande tail -f /var/log/odoo/odoo.log | grep --line-buffered "ERROR\|WARNING" en action pendant l'installation d'un module custom. Les lignes INFO sont filtrées, seules les ERROR et WARNING remontent au terminal. Le filtre est appliqué à la volée, sans modifier le fichier source ni redémarrer Odoo.

3. Trouver fichiers et chaînes de caractères

Sur une sandbox qui héberge plusieurs dizaines de modules custom et plusieurs centaines de modules cœur Odoo, retrouver le fichier qui définit un champ ou hérite d'un modèle natif demande une routine de recherche fiable. Quatre commandes y suffisent.

# Chercher tous les XML modifiés depuis un marqueur temporel
find . -name "*.xml" -newer /tmp/marker

# Chercher une chaîne récursivement dans les addons (numéro de ligne + nom de fichier)
grep -rn "_inherit = 'res.partner'" addons/

# Chercher un fichier dans toute la machine via la base mlocate
locate odoo.conf

# Trouver le binaire actif dans le PATH
which odoo-bin

La commande grep -rn est le réflexe à acquérir : -r recursive, -n ajoute le numéro de ligne. L'ajout de --include="*.py" limite la recherche aux fichiers Python et accélère sur les gros dépôts. Pour locate, sa base est mise à jour par sudo updatedb, exécuté typiquement une fois par jour via cron — un fichier créé il y a cinq minutes ne sera donc pas trouvé tant que la base n'est pas régénérée. Sur Ubuntu 24.04, le paquet est plocate.

4. Processus et ports — diagnostiquer un worker bloqué

Quand l'interface web ne répond plus, deux pistes à dérouler systématiquement : un worker Python figé, ou le port HTTP occupé par un processus fantôme issu d'un précédent crash. Cinq commandes ouvrent toutes les portes du diagnostic.

# Lister tous les processus liés à Odoo
ps aux | grep odoo

# Vue interactive triée CPU/RAM, filtrable par utilisateur
htop -u odoo

# Tuer proprement un PID (SIGTERM laisse le worker terminer sa transaction)
kill -SIGTERM <PID>

# Trouver le processus qui occupe le port 8069
lsof -i :8069

# Alternative moderne à netstat pour lister les ports en écoute
ss -tulpn | grep 8069

L'ordre des signaux compte. SIGTERM (15) demande au processus de s'arrêter proprement : le worker termine sa requête HTTP, ferme la transaction PostgreSQL, libère les ressources. SIGKILL (9) tue brutalement et laisse derrière des connexions PostgreSQL orphelines (idle in transaction) — à n'utiliser qu'en dernier recours, après un SIGTERM resté sans effet pendant plus de dix secondes. Sur Ubuntu 24.04, ss -tulpn est dix à cinquante fois plus rapide que lsof -i pour la même information utile (PID, processus, port) — préférer ss dans les scripts d'audit.

htop filtré sur l'utilisateur odoo affichant plusieurs processus python/odoo-bin avec consommation CPU et RAM par worker
Figure 2 — La commande htop -u odoo filtre l'affichage sur l'utilisateur système Odoo. Les processus python3 odoo-bin apparaissent avec leur consommation CPU et RAM. Le PID en première colonne se reporte directement dans kill -SIGTERM <PID> pour stopper un worker bloqué sans interrompre les autres.

📖 Définition — lsof et ss

lsof (list open files) liste tous les fichiers ouverts sur le système. Comme tout est fichier sous Unix (y compris les sockets réseau), lsof -i :PORT répond à la question « quel processus écoute sur ce port ? ». ss (socket statistics) est le successeur moderne de netstat dans iproute2. Combinaison utile -tulpn : t TCP, u UDP, l listening, p show process, n numeric (pas de résolution DNS). Plus rapide que lsof sur les hôtes chargés.

5. Permissions et filestore

Les soucis de droits arrivent toujours par surprise — typiquement après un rsync entre poste dev et VPS, ou après une bascule de l'utilisateur système qui exécute Odoo. Quatre commandes ferment le sujet.

# Rendre odoo-bin exécutable (755 = rwxr-xr-x)
chmod 755 odoo-bin

# Réajuster le propriétaire du filestore (récursif)
sudo chown -R odoo:odoo ~/.local/share/Odoo/filestore

# Forcer la permission 644 sur tous les fichiers (pas les répertoires)
sudo find ~/.local/share/Odoo/filestore -type f -exec chmod 644 {} \;

# Mesurer la taille du filestore par sous-répertoire (= par base)
du -sh ~/.local/share/Odoo/filestore/*

Le couple 755 / 644 est la convention standard : 755 sur les répertoires et exécutables, 644 sur les fichiers de données. Toute permission plus permissive (par exemple 777) sur le filestore est un anti-pattern de sécurité. La commande du -sh */ dans le répertoire filestore donne en deux secondes la liste des bases triées par poids — utile pour identifier celle qui sature un disque avant qu'une alerte de monitoring ne se déclenche.

6. Service systemd Odoo

Sur Ubuntu 24.04, Odoo tourne typiquement comme service systemd nommé odoo ou odoo.service. Quatre commandes pilotent le cycle de vie complet.

# Vérifier l'état du service (running, failed, inactive)
sudo systemctl status odoo

# Démarrer, arrêter, redémarrer
sudo systemctl start odoo
sudo systemctl stop odoo
sudo systemctl restart odoo

# Activer le démarrage automatique au boot
sudo systemctl enable odoo

# Consulter les logs systemd-journal du service
sudo journalctl -u odoo --since "1 hour ago"

L'option --since de journalctl accepte des formes variées : "1 hour ago", "yesterday" ou date ISO 8601 ("2026-05-13 14:00"). Combinée à -u odoo, elle isole les événements du service sur une fenêtre précise pour reconstituer un incident a posteriori.

📖 Définition — systemd

systemd est le gestionnaire de services par défaut des distributions Linux modernes (Ubuntu 16.04+, Debian 8+, RHEL 7+). Il remplace l'ancien init.d et SysVinit. Les services sont définis par des fichiers .service dans /etc/systemd/system/. Le composant journald centralise les logs (consultables via journalctl) au lieu des fichiers texte sous /var/log/. Pour Odoo, le service typique pointe ExecStart=/opt/odoo/odoo-bin -c /etc/odoo/odoo.conf et tourne sous l'utilisateur odoo.

7. Transferts locaux et backup rapide

Le développeur Odoo synchronise régulièrement son poste local avec un VPS de staging ou de prod. Quatre commandes couvrent les usages quotidiens, du transfert ponctuel d'un fichier de config jusqu'à la sauvegarde compressée d'un filestore.

# Copier un fichier vers un VPS distant via SSH
scp odoo.conf user@vps:/etc/odoo/

# Synchroniser un répertoire d'addons (--delete supprime côté cible les fichiers absents source)
rsync -avz --delete ./addons/ root@vps:/opt/odoo/custom-addons/

# Compresser un filestore avec horodatage automatique
tar czf filestore-$(date +%Y%m%d).tgz -C ~/.local/share/Odoo filestore/

# Dump PostgreSQL au format custom (sans filestore)
pg_dump -Fc -f backup_$(date +%Y%m%d).dump nom_base

Le flag -avz de rsync est le combo standard : a archive (préserve permissions, timestamps, symlinks), v verbose, z compression à la volée. L'option --delete est puissante mais destructive — à n'activer que si la cible est un miroir intégral du dépôt source. Pour les dumps PostgreSQL, le format custom (-Fc) produit un fichier binaire compressé restaurable via pg_restore, plus compact que le SQL plain. L'épisode S05 détaille les patterns pg_dump / pg_restore spécifiques à Odoo.

8. Cinq alias .bashrc qui changent la vie

Aucune commande Linux ne remplace un alias bien placé dans le .bashrc du développeur. Cinq alias suffisent à transformer le confort quotidien sur une sandbox Odoo.

# Suivre les erreurs Odoo en un caractère
alias logodoo='tail -f /var/log/odoo/odoo.log | grep --line-buffered "ERROR\|WARNING"'

# Redémarrer Odoo et suivre les logs systemd dans la foulée
alias restartodoo='sudo systemctl restart odoo && sudo journalctl -fu odoo'

# Se connecter à PostgreSQL avec le bon user en une frappe
alias psqlme='psql -U odoo -h localhost'

# Sauter dans le venv Odoo en une commande
alias odoodev='cd ~/odoo-dev && source venv/bin/activate'

# Vérifier l'état Git des addons custom
alias addons='cd ~/odoo-dev/addons-custom && git status'

Ces alias se déclarent dans ~/.bashrc, puis source ~/.bashrc les active dans la session courante. Règle d'or : ne pas créer d'alias qui masque une commande système standard (par exemple alias ls='rm -rf' est un piège sécurité — préfixer toujours par un verbe métier).

💡 Astuce — Navigation vi sur la ligne de commande

Ajouter set -o vi dans .bashrc active la navigation vi sur la ligne de commande Bash. Le mode normal (touche Échap) permet alors de naviguer avec h j k l, de supprimer un mot avec dw, de remplacer avec c, exactement comme dans l'éditeur. Un saut productif quand on enchaîne les inspections, à condition d'être déjà familier avec vi/vim. Réversible à tout moment via set -o emacs (mode par défaut).

9. Les 30 commandes en synthèse

La table ci-dessous reprend la totalité des trente commandes vues dans l'article. Mémoriser le cas d'usage permet de retrouver la commande sans hésiter, même sous pression.

#Cas d'usageCommande
1Changer de répertoirecd ~/odoo-dev
2Lister fichiers détaillésls -lah
3Afficher chemin courantpwd
4Afficher l'arborescencetree -L 2
5Suivre un fichier interactivementless +F fichier.log
6Suivre un log en temps réeltail -f odoo.log
7Filtrer ERROR/WARNING en fluxtail -f odoo.log | grep --line-buffered "ERROR\|WARNING"
8Suivre logs systemd-journaljournalctl -fu odoo.service
9Naviguer dans un flux logless +F odoo.log
10Trouver fichiers modifiés récentsfind . -name "*.xml" -newer /tmp/marker
11Chercher chaîne récursivementgrep -rn "_inherit" addons/
12Localiser un fichier par nomlocate odoo.conf
13Trouver un binaire dans PATHwhich odoo-bin
14Lister processus Odoops aux | grep odoo
15Vue interactive triée CPU/RAMhtop -u odoo
16Arrêter proprement un PIDkill -SIGTERM <PID>
17Identifier process sur portlsof -i :8069
18Lister ports en écoutess -tulpn | grep 8069
19Rendre exécutablechmod 755 odoo-bin
20Réajuster propriétaire récursifsudo chown -R odoo:odoo filestore/
21Appliquer 644 à tous les fichiersfind filestore -type f -exec chmod 644 {} \;
22Mesurer taille par sous-répdu -sh filestore/*
23État du service Odoosudo systemctl status odoo
24Redémarrer le servicesudo systemctl restart odoo
25Activer au bootsudo systemctl enable odoo
26Logs systemd fenêtre temporellejournalctl -u odoo --since "1 hour ago"
27Copier fichier vers VPSscp odoo.conf user@vps:/etc/odoo/
28Synchroniser addons VPSrsync -avz --delete ./addons/ user@vps:/opt/odoo/
29Archiver filestore datétar czf filestore-$(date +%Y%m%d).tgz filestore/
30Dump PostgreSQL format custompg_dump -Fc -f backup.dump nom_base

Pour fixer ces commandes en mémoire musculaire : tester chacune au moins une fois sur une sandbox locale avant la première intervention sous pression, puis les ranger dans un fichier ~/odoo-cheatsheet.md consultable en Ctrl+F. Au bout de quelques semaines, les quinze plus utilisées passent en réflexe.

Voir aussi dans la série

Article actuel
S01 — Linux : 30 commandes pour la sandbox

logs, processus, ports, permissions, systemd, alias .bashrc.

Publié
S02 — Git & GitHub : 20 commandes pour cloner, brancher, contribuer

clone shallow, submodules OCA, workflow feature-branch, PR via gh.

Publié
S03 — Bash : 5 scripts qui font gagner 1 heure par jour

start-odoo.sh, restore-db.sh, dump-and-clean.sh, install-and-test.sh, update-all-addons.sh.

Publié
S04 — odoo-bin shell : 15 patterns ORM essentiels

env, search_fetch v19, Domain, flush_model / invalidate_model.

Publié
S05 — PostgreSQL : psql, SELECT, dump propre

Requêtes psql, EXPLAIN ANALYZE, garde-fous UPDATE / DELETE, CTA E3.

Articles complémentaires

#50 — Installer Odoo 19 sur Ubuntu 24.04 LTS

Installation initiale — préalable à toute commande système.

#54 — Configurer l'environnement de développement Odoo 19

Setup PyCharm/VS Code, venv, addons-path — la suite de l'installation.

Se connecter pour laisser un commentaire.
Mesurer la performance de bus.bus en Odoo 19
Saison « Dépassement tech v19 » · Article 5/5 · CLOSING