apscheduler_celery_beat
Celery Beat actúa como scheduler distribuido para ejecutar tareas periódicas críticas: purga de datos biométricos expirados, rotación de logs, generación de reportes de métricas FAR/FRR y limpieza de sesiones huérfanas.
When to use
Usar para toda tarea que deba ejecutarse en intervalo fijo o en horario programado. En particular, la purga de biometría es obligatoria por GDPR y debe ejecutarse aunque el sistema esté bajo carga.
Instructions
- Instalar:
pip install celery[redis] django-celery-beatoAPSchedulersi no se usa Django. - Definir schedule en
backend/tasks/scheduler.py:from celery.schedules import crontab CELERYBEAT_SCHEDULE = { "purge-expired-sessions": { "task": "tasks.audit.purge_expired_biometric_data", "schedule": crontab(minute="*/15"), # cada 15 minutos }, "cleanup-orphan-minio-objects": { "task": "tasks.audit.cleanup_orphan_objects", "schedule": crontab(hour="*/1"), }, "generate-far-frr-report": { "task": "tasks.metrics.generate_daily_report", "schedule": crontab(hour=0, minute=0), }, } - Tarea de purga: consultar sesiones con
created_at < NOW() - INTERVAL '24 hours'ystatus = 'completed', eliminar objetos MinIO, nullificar referencias en PostgreSQL. - Arrancar beat:
celery -A backend.celery_app beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler. - Asegurar que solo hay una instancia de beat corriendo — usar Redis lock con
celery.utils.abstract.CallableTask. - Monitorizar con Celery Flower: comprobar que
last_run_atde cada tarea se actualiza correctamente.
Notes
- Beat es un proceso separado de los workers — arrancar con supervisor o como Deployment independiente en Kubernetes.
- Si falla la purga, Alertmanager debe notificar inmediatamente — es un incidente de compliance GDPR.
- Documentar el TTL exacto en el DPA (Data Processing Agreement) del cliente.