Files
traduccion_bots/iniciar_todo.py
nickpons666 baaf4bc1f7 perf: Optimizar inicio de servicios para reducir consumo de RAM
- Inicio escalonado con delays: Panel Web → 5s → Telegram → 10s → Discord
- Flags de Python para reducir footprint de memoria
- Variables de entorno PYTHONDONTWRITEBYTECODE y PYTHONOPTIMIZE
- Límites de memoria en docker-compose.yml
2026-03-20 03:47:59 -06:00

83 lines
2.6 KiB
Python
Executable File

#!/usr/bin/env python3
import subprocess
import sys
import os
import signal
import time
from datetime import datetime
LOG_DIR = "/app/data/logs"
os.makedirs(LOG_DIR, exist_ok=True)
def get_timestamp():
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_file = open(f"{LOG_DIR}/bots.log", "a")
def log(msg):
timestamp = get_timestamp()
log_line = f"[{timestamp}] {msg}\n"
log_file.write(log_line)
log_file.flush()
print(msg)
print("🤖 Iniciando Bots de Traducción...")
print("=" * 40)
processes = []
def start_process(cmd, name, delay_before=0):
if delay_before > 0:
log(f"⏳ Esperando {delay_before}s antes de iniciar {name}...")
time.sleep(delay_before)
log(f"✅ Iniciando {name}...")
log_path = f"{LOG_DIR}/{name.lower().replace(' ', '_')}.log"
with open(log_path, "a") as f:
p = subprocess.Popen(
cmd,
stdout=f,
stderr=subprocess.STDOUT,
preexec_fn=os.setsid
)
processes.append((p, name))
return p
p1 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "botdiscord/bot.py"], "Discord Bot", delay_before=10)
p2 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "bottelegram/telegram_bot.py"], "Telegram Bot", delay_before=5)
p3 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "panel/main.py"], "Panel Web", delay_before=0)
print("=" * 40)
print("🎉 Todos los servicios funcionando!")
print(f" 📍 Panel: http://localhost:8000")
print(f" 📁 Logs: {LOG_DIR}")
print("=" * 40)
print("\nCtrl+C para detener")
def signal_handler(sig, frame):
log("🛑 Deteniendo...")
for p, name in processes:
try:
os.killpg(os.getpgid(p.pid), signal.SIGTERM)
log(f"{name} detenido")
except:
pass
log_file.close()
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
while True:
for p, name in processes:
if p.poll() is not None:
log(f"⚠️ {name} se detuvo, reiniciando...")
if name == "Discord Bot":
p1 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "botdiscord/bot.py"], "Discord Bot", delay_before=10)
elif name == "Telegram Bot":
p2 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "bottelegram/telegram_bot.py"], "Telegram Bot", delay_before=5)
elif name == "Panel Web":
p3 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "panel/main.py"], "Panel Web", delay_before=0)
time.sleep(5)