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:
1 2 |
$ php ./bin/magento cron:install Crontab has been generated and saved |
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.
1 2 3 4 5 6 7 8 |
$ crontab -l MAILTO="" #~ MAGENTO START 538dfab97c181872f664ffdee634945c * * * * * /opt/plesk/php/7.1/bin/php /var/www/vhosts/artegrafico.net/magento2-2.3.0.artegrafico.net/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/vhosts/artegrafico.net/magento2-2.3.0.artegrafico.net/var/log/magento.cron.log * * * * * /opt/plesk/php/7.1/bin/php /var/www/vhosts/artegrafico.net/magento2-2.3.0.artegrafico.net/update/cron.php >> /var/www/vhosts/artegrafico.net/magento2-2.3.0.artegrafico.net/var/log/update.cron.log * * * * * /opt/plesk/php/7.1/bin/php /var/www/vhosts/artegrafico.net/magento2-2.3.0.artegrafico.net/bin/magento setup:cron:run >> /var/www/vhosts/artegrafico.net/magento2-2.3.0.artegrafico.net/var/log/setup.cron.log #~ MAGENTO END 538dfab97c181872f664ffdee634945c |
Para poder eliminar automáticamente el crontab de Magento2 introduciremos el comando (también podremos usar crontab -e y borrarlas manualmente):
1 2 |
$ php ./bin/magento cron:remove Magento cron tasks have been removed |
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
1 2 |
$ php -dmemory_limit=1G ./bin/magento cron:run Ran jobs by schedule. |
Al comando cron:run le podemos indicar opciones.
- –group index le indica que ejecute la tareas de indexación.
12$ php -dmemory_limit=1G ./bin/magento cron:run --group indexRan jobs by schedule. - –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.
1 2 3 |
$ mysql -u root -p > mysql use magento2.3; > SELECT * from cron_schedule; |