Tareas programadas (cron jobs) en Magento2 – Parte 2

Ya hemos visto anteriormente como funciona el sistema de tareas programadas de Magento2.

Ahora veremos como crear nuestros propias tareas cron (cron jobs) y como crear grupos de tareas para nuestros módulos.

En el caso de que nuestro módulo necesite la ejecución de una tarea programada periódicamente, tendremos que crear un crontab en nuestro módulo. Este crontab contendrá la configuración de las tareas.

Empezaremos creando el fichero crontab.xml en el directorio etc/ de nuestro módulo. La estructura del crontab es la siguiente:

Nuestro crontab se puede dividir en grupos y cada uno de ellos puede contener diferentes tareas.  Veamos sus elementos y atributos:

  • group id: Es el nombre de la tarea.
  • job name: Identificador único de la tarea.
  • job instance class: Es el Path donde será instanciada la clase y que ejecutará la tarea.
  • job method: El método de la clase que será ejecutado.
  • schedule time: Programación de la tarea en formato cron.

Un ejemplo real para poder probar nuestro crontab.xml prodría ser el siguiente:

«Cada crontab puede contener varios grupos con una o más tareas».

Lo siguiente que tenemos que hacer es crear la clase que ejecutará nuestro crontab.xml. Para ello la crearemos en el directorio Cron/ de nuestro módulo.

Para probar si nuestra tarea funciona correctamente haremos un flush de nuestra cache y ejecutaremos el comando cron:run indicándole que el grupo al que pertenece de Magento es default.

En caso de producirse un error al ejecutarse la tarea, Magento2 guardará el error que se produzca en el fichero exception.log en el directorio var/log/ y lo marcará como CRITICAL.

Si de lo contrario no se producen errores, los registros de la tarea son guardados en el fichero system.log en el directorio var/log/

Recuerda que al pertenecer al grupo «default» se ejecutará junto a otras tareas default de Magento.

También podemos comprobar el estado actual de las tareas consultando la tabla cron_schedule que ya explicamos en nuestro post anterior.

Opciones cron de grupo

Ya hemos visto que existen varios grupos cron en Magento2:

  • default
  • index
  • customers

Opcionalmente podremos declarar un nuevo grupo y especificar sus opciones de configuración.

Para realizar esto debemos crear un fichero llamado cron_groups.xml en el directorio etc/ de nuestro módulo.

Si vamos a nuestro gestor de Magento en Store > Configuration > System y desplegamos la pestaña Cron podremos ver que el nuevo grupo ha sido declarado.

Veamos con más detalle las opciones de configuración del nuevo grupo:

  • schedule_generate_every: es la frecuencia (en minutos) que las tareas son escritas en la tabla cron_schedule de nuestra base de datos.
  • schedule_ahead_for: Tiempo en minutos por adelantado en que una tarea es escrita en la base de datos.
  • schedule_lifetime: El tiempo en minutos que tardará una tarea es ser considerada como fallida.
  • history_cleanup_every: El tiempo en minutos que permanecerá la tarea en la base de datos.
  • history_success_lifetime: Tiempo en minutos que una tarea completada con éxisto será mantenida en la base de datos.
  • history_failure_lifetime: Tiempo en minutos que una tarea fallida será mantenida en la base de datos.
  • use_separate_process: Ejecutar las tareas de este grupo por procesos separados de php.

Para ejecutar todas las tareas cron que pertenezcan a este grupo usaremos el  mismo comando que hemos visto anteriormente pero indicándole el nuevo grupo que hemos creado:

Conclusiones

Las tareas programadas nos ahorraran mucho tiempo realizando tareas específicas, por lo que espero haber ayudado a entender como se realizan dichas tareas en Magento2.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.