Tareas programadas (cron jobs) en Magento2 – Parte 1

Muchas de las características de Magento2 requieren al menos una tarea programada.

Estas tareas pueden encargarse de reglas de precios, newsletters, sitemaps, actualización de precios y stocks, reindexación, etc …

Se recomienda que las tareas programadas las ejecute el propietario del sistema de ficheros de Magento por lo que no se recomienda su ejecución como usuario root.

Las tareas programadas son ejecutadas en sistemas Unix usando crontabs, que son ficheros que contienen las instrucciones para que el demonio cron los ejecute en una fecha determinada.

Cada usuario tiene su propio crontab y todos sus comandos son ejecutados por orden del usuario que los tiene en propiedad.

Magento2 utiliza cron para dos tipos de tareas

  • Configuración de línea de comandos de PHP: la tarea programada reindexará los indices, generará emails, sitemaps, etc …
  • Configuración de plugins del servidor: Son Upgrades de la aplicación de Magento, actualizaciones de themes, paquetes de idiomas, desinstalación de extensiones.

Para evitar problemas durante la instalación y actualización se recomienda aplicar las mismas configuraciones de PHP tanto para las configuraciones de linea de comandos como para el propio servidor web.

Para que se entienda fácilmente, puedes tener varias versiones PHP coexistiendo juntas, por lo que el servidor web puede estar ejecutando la versión 7.1 y cuando accedes desde línea de comandos este podría usar la 5.6.

Creando el crontab para Magento

  • Para crear el crontab de para Magento2 necesitamos loguear a través de shell.
  • Cambia al directorio donde tengas instalado Magento.
  • Introduce el siguiente comando:

Si el usuario ya tiene otras tareas programadas no os preocupéis porque no las sobrescribe.

Para comprobar que se han creado correctamente las tareas ejecutamos crontab -l . Y así de sencillo es, Magento2 las creará para nosotros sin tener que complicarnos la vida.

Para poder eliminar automáticamente el crontab de Magento2 introduciremos el comando (también podremos usar crontab -e y borrarlas manualmente):

cron:remove no eliminará otras tareas que no sean las propias de Magento y que estén definidas entre #MAGENTO START Y #MAGENTO END.

Para ejecutar cron manualmente desde línea de comandos usaremos el comando cron:run

Al comando cron:run le podemos indicar opciones.

  • –group index le indica que ejecute la tareas de indexación.
  • –group default que contiene la mayor parte de tareas de Magento.En otro tema veremos con más detalle este tipo de tareas para módulos personalizados.

    Logs de las tareas programadas

Los logs de sistema nos proveen información detallada para controlar errores del sistema.

  • Todas las excepciones de las tareas programadas son guardadas por
    \Magento\Cron\Observer\ProcessCronQueueObserver::execute
  • Las tareas programadas que produzcan errores son guardadas en el directorio: var/log/
  • Si producen un error son marcadas como “CRITICAL” y salvadas en el fichero exception.log

Todos los datos que generen las tareas programadas son salvados en la tabla de Magento2 cron_schedule.

Esta tabla contiene un registro de cada tarea con su id único, el estado actual de la tarea, fecha de creación, fecha de programación, fecha de ejecución y fecha de finalización.

 

Deja un comentario

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