# /home/x/rss/scheduler.py import time import logging import atexit from datetime import datetime, timedelta import sys from apscheduler.schedulers.background import BackgroundScheduler # Importamos la app (para el contexto) y la función de captura desde nuestro fichero principal # --- CORRECCIÓN 1: Se cambió 'fetch_and_store' por 'fetch_and_store_all' --- from app import app, fetch_and_store_all # Es importante configurar el logging también para este proceso logging.basicConfig(stream=sys.stdout, level=logging.INFO, format='[%(asctime)s] %(levelname)s in %(module)s: %(message)s') # Creamos el planificador con la zona horaria UTC para evitar ambigüedades scheduler = BackgroundScheduler(daemon=True, timezone="UTC") # --- Apagado robusto con atexit --- def shutdown_scheduler(): """Función para detener el planificador de forma segura al salir.""" if scheduler.running: scheduler.shutdown() logging.info("Scheduler del worker detenido.") # Registramos la función de apagado para que se ejecute al terminar el proceso atexit.register(shutdown_scheduler) if __name__ == '__main__': # Usamos el contexto de la aplicación para asegurar que la tarea tiene acceso a todo lo necesario with app.app_context(): # Añadimos la tarea para que se ejecute cada 3 minutos # La primera ejecución será a los 10 segundos de arrancar el worker scheduler.add_job( # --- CORRECCIÓN 2: Se cambió 'fetch_and_store' por 'fetch_and_store_all' --- fetch_and_store_all, "interval", minutes=10, id="rss_job", next_run_time=datetime.utcnow() + timedelta(seconds=10) ) # Arrancamos el planificador scheduler.start() logging.info("Worker del Scheduler iniciado. Tarea programada cada 3 minutos.") logging.info("El proceso se mantendrá en ejecución para permitir que se ejecuten las tareas.") # Este bucle infinito simplemente mantiene vivo el script del worker. # El apagado ahora es manejado por atexit. try: while True: time.sleep(60) except (KeyboardInterrupt, SystemExit): logging.info("Apagando el worker...")