import socket import time import os import sys # --- Configuración de la base de datos (leída desde el entorno) --- DB_HOST = os.environ.get("HOST", "db") DB_PORT = int(os.environ.get("PORT", 5432)) # --- Lógica de espera de PostgreSQL --- print(f"Servicio Odoo: Esperando a PostgreSQL en {DB_HOST}:{DB_PORT}...") sys.stdout.flush() # Usamos un bucle para intentar la conexión hasta que tenga éxito while True: try: # Intenta crear una conexión de socket with socket.create_connection((DB_HOST, DB_PORT), timeout=5): print("Servicio Odoo: PostgreSQL está listo y aceptando conexiones.") sys.stdout.flush() break # Sale del bucle si la conexión es exitosa except (socket.timeout, ConnectionRefusedError, OSError) as e: print(f"Servicio Odoo: PostgreSQL no está listo todavía ({e}). Reintentando en 2 segundos...") sys.stdout.flush() time.sleep(2) # --- Iniciar Odoo --- print("Servicio Odoo: PostgreSQL listo. Iniciando Odoo...") sys.stdout.flush() # Argumentos para Odoo. Odoo leerá la configuración principal # desde /etc/odoo/odoo.conf y las variables de entorno. # El db-filter se pasa como argumento explícito. odoo_args = ["odoo", "--db-filter=^lims_demo$"] # Reemplaza el proceso actual con Odoo. # Esto es crucial para que Odoo sea el proceso principal (PID 1) # y reciba las señales del sistema (ej. para detenerse). try: os.execvp("odoo", odoo_args) except FileNotFoundError: print("Error fatal: El comando 'odoo' no se encontró en el PATH del contenedor.", file=sys.stderr) sys.exit(127) except Exception as e: print(f"Error fatal al intentar ejecutar Odoo: {e}", file=sys.stderr) sys.exit(1)