Blog
Aprendiendo Cron Jobs en Magento 2
- diciembre 4, 2023
- Publicado por: admin
- Categoría: Magento 2

Cuando escuché este concepto por primera vez en la versión 1 de Magento (para ser exacto la versión 1.9 community de Magento) me pidieron desarrollar un CRON en Magento y lo primero que se me vino a la cabeza era un CRON de Linux, para ese entonces yo trabajaba con sistema operativo Windows y pensé que era algo sencillo que había que configurar en Linux como se hace en Windows con las tareas programadas, pero para aquellos que ya saben de cron en Magento podrían notar que los Cron Jobs en Magento no son lo mismo que los CRON Jobs de Linux, pues mi pensamiento estaba a medias, ya que una parte sí está del lado del sistema operativo y la otra parte del lado de Magento.
Yo trataré de explicarlo de la mejor forma posible para su mejor comprensión, primero vámonos del lado del servidor, si nos enfocamos en el sistema operativo Linux hablemos de un Ubuntu 14 que es el que trabajo en mi computadora y el Ubuntu se mira como si de un Windows 7 o un Windows 10 estuviéramos hablando, claro está que Windows por detrás corre sobre un sistema operativo MS-DOS que para el caso de Ubuntu sería Linux. Bien ahora digamos que Linux para hablar de Cron o tareas programadas estaríamos hablando de un simple archivo de configuración que el Linux necesita para entender esto de los Cron, ese archivo es llamado en Linux crontab (tabla de cron), ahora cabe mencionar algo mas y es la palabra Shell y ¿Qué es un Shell en Linux? Lo expresaré de la forma más simple es otro archivo más pero este debe contener por así decirlo instrucciones como los script de un lenguaje de programación que se van interpretando línea a línea por el sistema operativo Linux, pues bien ahora si unimos los dos conceptos pensemos en que el crontab es un archivo que tiene un registro de cuándo y cómo deben ser ejecutados los archivos Shell que claro, estos archivos Shell realizarán ciertas acciones específicas. Y finalmente no olvidar algo importante debes tener muy en cuenta: la distribución de Linux que tengas ya que con respecto a ello sabrás qué tipo de archivo crontab tendrá tu sistema operativo.
Ahora con lo anterior espero quede entendido de que trata esto de los Cron del lado del sistema operativo porque ahora pasaremos a lo que nos corresponde hablar: De los Cron pero del lado de Magento, específicamente de la versión 2.
Para entender los Cron en Magento 2 explicaré un par de archivos que así como en lo anterior, debemos entender cada uno y cuál es su finalidad para que en conjunto se pueda ver claramente el porqué de la existencia de cada uno.
Lo primero que debo mencionar es que si el Cron del sistema Operativo Linux no está en ejecución de forma correcta y en buen funcionamiento el Cron de Magento no podrá estar funcionando, así que este dependerá del mismo.
Segundo, si ya se conoce la CLI o como bien se le podría decir a la consola de ejecución de comandos de Magento 2 , hay que entender que el Cron del sistema operativo debe estar bien configurado para ejecutar el comando de la CLI de Magento 2, me refiero a que permita ejecutar el comando bin/magento cron:run que es el más importante bin/magento update:cron y bin/magento setup:cron:run Y ¿Qué es todo esto y a qué me refiero? A que esté bien configurado, te lo comento porque aún hay muchos (y me incluyo) que nos costó trabajo entender al principio, para los que venimos de sistemas operativos no sabemos mucho de permisos , usuarios y grupos de usuarios que es algo común en sistemas Linux.
Un usuario en Linux es una cuenta de acceso con usuario y contraseña que sirve para acceder a un sistema Linux, un grupo es como su nombre lo indica, un grupo que se crea en un sistema Linux. Estos grupos sirven para agrupar usuarios, este puede contener diferentes tipos de permisos y niveles de acceso, es importante señalar que hay un usuario más, el poderoso root en Linux y lo menciono porque hay que tener cuidado en manejar este usuario ya que puede dar permisos no esperados y si estamos dentro en Linux con él puede hacer cosas inesperadas que nos puede llevar a dolores de cabeza con implementaciones y configuraciones del lado de Magento, así que no es lo mismo trabajar con ese usuario que con un usuario creado con el grupo y permisos correspondientes para Magento.
Anterior les mencione de bin/magento cron:run, bin/magento/update/cron.php y bin/magento setup:cron:run esto último mírenlo como una path de permisos que deben definirse dentro del archivo de ejecución de crontab que ya mencionábamos la parte de cron en el sistema operativo, aquí daré énfasis a algo para entenderlo mejor, quien sabe colocar una cuantas líneas de texto en un archivo de cron de Linux pues podría hacerlo tan sencillo, solo abrir el archivo y colocar esas líneas. Pero aún más fácil Magento cuenta con un comando que permitirá crear un archivo cron de forma automática, solo basta con ejecutar este comando en la ruta raíz del proyecto donde tenemos instalado Magento 2, php bin/magento cron:install –forceeste un simple comando lo hará por nosotros, crear ese archivo del que he estado hablando y con las líneas correspondientes al final, lo único que está sucediendo es dando de alta un archivo que solo indicará cuales son las rutas que debe ejecutar y cuando, si bien miramos esas líneas creadas serian estas:
Ese es el archivo tan simple del que hablo y para no liarnos más solo entendamos que eso es una indicación, un archivo crontab que es una tabla de secuencia parte del sistema operativo y las instrucciones indican para este archivo creado por el usuario X propietario de los archivos del proyecto de la instalación de Magento 2 permítele ejecutar estos comandos en estas direcciones.
Al final si abrimos la raíz de nuestro proyecto y ejecutáramos el comando php bin/magento cron:run directamente estaríamos mandando a ejecutar el CRON pero del lado de Magento lo indicado anteriormente es que sea de forma automatizada y en conjunto, uno por el lado del sistema operativo indicando que puede hacer y cuándo el otro del lado de Magento entrará en acción.
Lo que hace realmente el comando php bin/magento cron:run es mandar a llamar todos los archivos crontab.xml creados en cada uno de los módulos nativos y personalizados de todo el proyecto apilarlos y registrarlos en una tabla llamada cron_schedule, esta tabla tiene el indicativo de cuándo comenzar a ejecutar una tarea, el estatus de la misma e información importante para después de que se ejecute así que de esta manera y forma sincronizada los dos conceptos de CRON de cada lado una por parte del sistema operativo y la otra por parte de Magento sabrán como hacer su tarea de forma correcta, hay cosas importantes más que entender en Magento 2 que para no formular un desorden con las tareas programadas se pensó en agruparlas, como categorizarlas darle la facilidad al desarrollador para que pudiera agregar su nueva tarea en un grupo y al final se pudieran ejecutar de forma agrupada, de esta forma la daría más orden a las tareas, y no solo ahí quedo el asunto también si un desarrollador desea crear su propio grupo personalizado lo puede hacer. Magento le permite generar su propio grupo de tareas y colocar ahí las que necesite, la finalidad es que para cuando se requiera ejecutar de forma Manual estas tareas no se tenga que ejecutar el enorme bloque de tareas y mediante el comando php bin/magento cron:run –group=”nombre de grupo” se pudieran mandar a llamar solo las tareas del grupo específico y no esperar a ejecutar todo el bloque de grupos.
Del lado del BackEnd de Magento ya existe una serie de grupos definidos así como uno por defecto “default” pero si necesitas uno nuevo no olvides que lo puedes hacer.
Parece tedioso todo esto pero cuando te dé un ejemplo de cómo crearlo con este articulo ya leído te darás cuenta que esta genial, es un orden excelente y rápidamente te puedes hacer un especialista en crear tus cron del lado de Magento deja el lado del servidor para los expertos que se encarguen de ellos como los devOps pero una vez leído este artículo sabrás de lo que se habla y no podrán dejarte todo de tu lado si es que algo no está bien de lado del sistema operativo es bueno conocer de la operación técnica, también te hará un mejor desarrollador no podrás decir que lo sabes todo pero sabrás defender tu parte: la de programador.
Estaba pensando dejarte un ejemplo de creación de un cron del lado de Magento pero pensándolo bien no es parte de un artículo te daré algo mejor un curso como tal para que aprendas a hacerlo será mejor aquí te dejo el link saludos y déjame tus comentarios no soy el experto que quisiera ser intento aprender cada vez más algo nuevo así que tus consejos y comentarios me serán de gran ayuda.