En cuanto tienes una aplicación con un mínimo de complejidad, enseguida identificas que necesitas ejecutar tareas en segundo plano o batch, para ejecutar procesos a determinadas horas, por ejemplo, migración de información, backup de tu sistema, etc.
Si dispones de la totalidad de acceso a tu sistema, enseguida te acuerdas de CRON o Crontab, que es el planificador de tareas del sistema operativo.
No siempre tienes total acceso para este tipo de configuración y además es complejo. Además, tienes el problema de que pasar tu aplicación de una máquina a otra, tienes que recordar que hay acciones fuera de tu aplicativo, por lo que es una posible fuente de problemas.
He diseñado un sistema que permite integrarse 100% con PHPrunner y que elimina el problema de migración de configuración, y facilita la definición y gestión de estas tareas Batch.
Objetivo
Disponer de un sistema, similar en funcionalidad al Crontab y totalmente integrado con PHPRunner.
Este sistema debe permitir:
- Definir las tareas en formularios hechos en PHPRunner, en donde se especifique:
- Fecha inicial de ejecución de la Tarea.
- Fecha final de ejecución de la Tarea.
- Intervalo de ejecución, definido en meses, días, horas y minutos.
- Comando de ejecución con path variable dependiendo de la ubicación del aplicativo.
- Registro por cada ejecución que indique: hora de inicio, hora de final y resultado de la ejecución.
- Definición de tiempo máximo de ejecución y si se supera, cancelación del proceso.
- Ejecución única en el sistema de una tarea Batch (para no sobrecargar el sistema).
- En las tareas Batch, posibilidad de trazas, para depuración y control, integrada con la aplicación de PHPRunner.
- Normalización de las tareas Batch, para utilizar la conexión de base de datos del aplicativo de PHPRunner (facilidad en la migración entre sistemas).
DEMO: https://fhumanes.com/scheduler/
(Esta versión está limitada para impedir mal uso de los ejemplos)
Información que tratamos para cada tarea. No se ejecuta cuando está marcada el campo de «Status finished» o le campo «Date Next Execution» es inferior a la fecha actual.
También, en la definición del comando a ejecutar hay estas sustituciones:
{DIR} .- Se sustituye por el path donde se este ejecutando el aplicativo
{ID_TASK} .- Se sustituye por el ID del registro de log de ejecución.
Si te interesa este tema, sigue este enlace para ver el artículo completo.