Ultimate Cron
Módulo avanzado de gestión de cron que ejecuta trabajos cron individualmente en paralelo utilizando reglas configurables, gestión de pools y balanceo de carga.
ultimate_cron
Overview
Ultimate Cron es una solución integral de gestión de cron para Drupal que reemplaza la lógica de cron del núcleo con un sistema más potente y flexible. Aunque mantiene compatibilidad con los métodos estándar de invocación de cron de Drupal (drush cron, crontab, etc.), proporciona control granular sobre trabajos cron individuales.
El módulo descubre automáticamente todas las implementaciones de hook_cron() de los módulos habilitados y crea entidades de trabajo cron individuales para cada una. Cada trabajo puede configurarse de forma independiente con su propio horario, parámetros de ejecución y configuraciones de registro a través de una arquitectura basada en plugins.
Los componentes arquitectónicos clave incluyen Schedulers (que determinan cuándo se ejecutan los trabajos), Launchers (que controlan cómo se ejecutan los trabajos) y Loggers (que registran el historial de ejecución). El módulo soporta sintaxis crontab extendida con operadores especiales como skew (@) para distribución de carga entre múltiples trabajos.
Ultimate Cron también proporciona integración opcional con queue workers, exponiendo cada queue worker como un trabajo cron configurable por separado. Esto permite un control detallado sobre la frecuencia y comportamiento del procesamiento de colas.
Features
- Descubrimiento automático de todas las implementaciones de hook_cron() y conversión a trabajos cron gestionables individualmente
- Arquitectura basada en plugins con Schedulers, Launchers y Loggers intercambiables
- Sintaxis crontab extendida con operador skew (@) para balanceo de carga automático entre trabajos
- Registro basado en base de datos y Cache con políticas de retención configurables
- Gestión de bloqueos que previene la ejecución concurrente del mismo trabajo
- Ejecución manual de trabajos, habilitación/deshabilitación y desbloqueo desde la interfaz de usuario y Drush
- Registros de ejecución detallados con niveles de severidad, seguimiento de duración y atribución de usuario
- Integración opcional con queue workers exponiendo los queue workers como trabajos cron individuales
- Seguimiento de progreso para trabajos de larga duración
- Detección de trabajos retrasados e informes de estado
- Ordenamiento de trabajos arrastrables para control de prioridad de ejecución
Use Cases
Ejecutar trabajos intensivos en recursos en horas de baja actividad
Use el scheduler Crontab para programar trabajos pesados como indexación de búsqueda (search_cron) o generación de sitemap (simple_sitemap_cron) para ejecutarse durante períodos de bajo tráfico. Ejemplo de regla: '0 3 * * *' se ejecuta a las 3 AM diariamente. El operador skew (@) puede distribuir múltiples trabajos pesados: '0+@ 3 * * *' asegura que cada trabajo se ejecute en un minuto ligeramente diferente.
Procesamiento de colas de alta frecuencia
Habilite la integración con queue workers para exponer los queue workers como trabajos cron individuales. Configure una cola como 'entity_update' para ejecutarse cada minuto mientras mantiene colas menos críticas en intervalos más largos. Esto previene la acumulación de colas sin sobrecargar el servidor.
Depuración de problemas de cron
Use 'drush cron:list --behind' para identificar trabajos que no se han ejecutado según el horario. Verifique los registros de trabajos individuales con 'drush cron:logs nombre_trabajo' para ver mensajes de error. El logger de base de datos retiene historial de ejecución detallado incluyendo niveles de severidad y trazas de pila para depuración.
Balanceo de carga entre múltiples servidores
Use el operador skew (@) en las reglas de programación para distribuir automáticamente la ejecución de trabajos a través del tiempo. Cuando múltiples servidores web ejecutan cron, el mecanismo de bloqueo del launcher serial asegura que cada trabajo solo se ejecute en un servidor a la vez, previniendo la ejecución duplicada.
Prevención de trabajos descontrolados
Configure lock_timeout en las configuraciones del launcher para liberar automáticamente bloqueos después de un tiempo especificado. Si un trabajo se cuelga o falla sin desbloquear, el bloqueo expirará y permitirá que el trabajo se ejecute de nuevo. Los administradores también pueden desbloquear manualmente trabajos atascados vía la interfaz o 'drush cron:unlock'.
Monitoreo de la salud del cron
El módulo se integra con el informe de estado de Drupal, mostrando advertencias cuando los trabajos están retrasados. Esto puede integrarse con sistemas de monitoreo para alertar a los administradores de fallos de cron.
Creación de trabajos personalizados
Cree trabajos cron personalizados agregando entidades de configuración al directorio config/install o config/optional de su módulo. Especifique el callback usando varios formatos: nombre de función, formato module#hook para implementaciones de hooks, class::method para métodos estáticos, o service.name:method para métodos de servicios.
Tips
- Use el operador skew (@) en las reglas de programación para distribuir automáticamente los tiempos de ejecución de trabajos y prevenir que todos los trabajos se ejecuten en el mismo momento
- Deshabilite el módulo Automated Cron del núcleo para sitios en producción y use un disparador de cron externo apropiado vía crontab o proveedor de hosting
- El comando 'drush cron:run nombre_trabajo --force' es útil para probar trabajos sin esperar su horario
- Los pesos de los trabajos (establecidos arrastrando en la interfaz) controlan el orden de ejecución - los pesos más bajos se ejecutan primero
- El logger de Cache es ideal para trabajos de alta frecuencia donde solo necesita ver la ejecución más reciente
- Configure valores generosos de lock_timeout para trabajos que pueden tomar cantidades variables de tiempo para prevenir la liberación prematura del bloqueo
- Monitoree la página del informe de estado para advertencias de 'trabajos retrasados' como indicador temprano de problemas de cron
Technical Details
Admin Pages 6
/admin/config/system/cron/jobs
Interfaz administrativa principal que muestra todos los trabajos cron descubiertos en una tabla arrastrable. Muestra el título del trabajo, módulo, horario, última ejecución, duración y estado de ejecución. Proporciona operaciones para editar, ejecutar, desbloquear, habilitar/deshabilitar y ver registros de cada trabajo. Los trabajos pueden reordenarse arrastrándolos para controlar la prioridad de ejecución.
/admin/config/system/cron/settings
Página de configuración de colas para configurar cómo Ultimate Cron maneja la integración con queue workers. Cuando está habilitado, los queue workers se exponen como trabajos cron individuales con programación configurable.
/admin/config/system/cron/jobs/manage/{job_id}
Formulario de configuración para editar un trabajo cron individual. Permite la personalización de los plugins de scheduler, launcher y logger del trabajo con sus respectivas configuraciones.
/admin/config/system/cron/jobs/logs/{job_id}
Muestra el historial de ejecución para un trabajo cron específico. Muestra indicador de severidad, hora de inicio, hora de fin, mensajes y duración para cada ejecución.
/admin/config/system/cron/jobs/{job_id}/run
Ejecuta inmediatamente el trabajo cron especificado independientemente del horario (respeta los bloqueos).
/admin/config/system/cron/jobs/{job_id}/unlock
Desbloquea forzosamente un trabajo cron atascado, permitiendo que se ejecute de nuevo. Usar con precaución ya que el trabajo puede seguir ejecutándose.
Permissions 3
Hooks 6
hook_pre_schedule
Se invoca justo antes de que se solicite al trabajo su horario. Permite a los módulos modificar el comportamiento de programación.
hook_post_schedule
Se invoca después de que se ha solicitado al trabajo su horario.
hook_pre_launch
Se invoca justo antes de que se lance un trabajo. Útil para configuración previa a la ejecución.
hook_post_launch
Se invoca después de que se ha lanzado un trabajo. Puede ser llamado antes o después de hook_post_run dependiendo de la implementación del launcher.
hook_pre_run
Se invoca justo antes de que se ejecute el callback de un trabajo.
hook_post_run
Se invoca después de que el callback de un trabajo ha completado su ejecución.
Drush Commands 6
drush cron:list
Lista todos los trabajos cron con su estado, horario e información de última ejecución
drush cron:run <name>
Ejecuta un trabajo cron específico inmediatamente
drush cron:logs <name>
Muestra registros de ejecución para un trabajo cron específico
drush cron:enable <name>
Habilita un trabajo cron
drush cron:disable <name>
Deshabilita un trabajo cron
drush cron:unlock <name>
Desbloquea un trabajo cron atascado
Troubleshooting 6
Asegúrese de que el cron externo esté configurado para activar el cron de Drupal con suficiente frecuencia (al menos tan frecuentemente como el horario de su trabajo más frecuente). Deshabilite el módulo Automated Cron del núcleo ya que solo se ejecuta en solicitudes de página. Verifique 'drush cron:list --behind' para trabajos retrasados.
La ejecución anterior puede haberse bloqueado sin liberar el bloqueo. Use 'drush cron:unlock nombre_trabajo' o haga clic en Unlock en la interfaz. Investigue la causa verificando los registros recientes en busca de errores.
Esto no debería ocurrir con el mecanismo de bloqueo de Ultimate Cron. Verifique si múltiples disparadores de cron están ejecutándose simultáneamente o si lock_timeout es demasiado corto. Aumente lock_timeout en las configuraciones del launcher.
La integración con queue workers está deshabilitada por defecto. Habilítela en /admin/config/system/cron/settings marcando 'Override cron queue processing'. Luego ejecute 'drush cr' o use el botón 'Discover jobs'.
Ajuste las configuraciones de limpieza del logger de base de datos. Cambie el método a 'Retener solo una cantidad específica' y reduzca la cantidad de retención, o use 'Eliminar registros más antiguos que una edad especificada' con un tiempo de expiración más corto.
La función callback ya no existe, probablemente porque el módulo proveedor fue desinstalado o la función fue eliminada. Elimine la entidad de trabajo huérfana o reinstale el módulo.
Security Notes 4
- El permiso 'administer ultimate cron' está restringido y solo debe otorgarse a administradores de confianza ya que permite control total sobre la ejecución de trabajos cron
- La ejecución manual de trabajos vía la interfaz o Drush se registra con atribución de usuario para propósitos de auditoría
- Los trabajos siempre se ejecutan como usuario anónimo para asegurar permisos consistentes independientemente de quién active el cron
- Los IDs de bloqueo se generan usando uniqid() para unicidad pero no deben considerarse criptográficamente seguros