47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
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)
|