Creación de un cronjob en Magento

Llegamos a otro punto a tratar de Magento: los cronjobs. Antes de hablar de los cronjobs de Magento es necesario saber qué son los cronjobs en general: son tareas periódicas que se realizan sobre nuestro sistema/aplicación para realizar cualquier tarea de mantenimiento o cubrir cualquier necesidad como puede ser realizar una copia de base de datos/desarrollo, etc.

La lista de tareas que se tienen que realizar en un sistema operativo, en este caso Linux, quedan almacenadas en la crontab. Para poder ver esta tabla tenemos que acceder a nuestro servidor por ssh y poner el siguiente comando:

crontab –l

Con este comando veríamos la tabla con las tareas y su periodicidad, veamos un ejemplo de crontab:

0 22 * * * root /usr/respaldodiario.sh

Los números y asteriscos van a indicar la  frecuencia con la que se ejecutará dicho script.

minuto hora díaDelMes mes diaDeLaSemana comando

Perioricidad de un cronjob

si ponemos */[valor] significa periodicidad, con lo cual el cron se ejecutará cada minuto, cada mes, cada x tiempo, etc. Para una explicación mas completa visitar este enlace.

Una vez visto los conceptos básicos para poder entender lo demás, pasemos a realizar un cron en Magento.

El primer paso que debes de realizar es añadir a la crontab de tu sistema, en este caso Unix la siguiente entrada:

*/5 * * * *  php /absolute/path/to/magento/cron.php

Con esto lo que hacemos es que todas last areas de Mantenimiento de Magento se ejecuten periodicamente,  algunas de ellas se permite configurar estos parámetros desde el panel de administración.

Module Cronjob Cron Syntax Frequency Left out
Log log/cron:: logClean System→Log Cleaning
log/aggregation:: run */10 * * * * Every 10 minutes Yes
Tax tax/observer:: aggregateSalesReportTaxData 0 0 * * * Daily at midnight
CatalogRule catalogrule/observer:: dailyCatalogUpdate 0 1 * * * Daily at 1 am
Sales sales/observer:: cleanExpiredQuotes 0 0 * * * Daily at midnight
sales/observer:: aggregateSalesReportOrderData 0 0 * * * Daily at midnight
sales/observer:: aggregateSalesReportShipmentData 0 0 * * * Daily at midnight
sales/observer:: aggregateSalesReportInvoicedData 0 0 * * * Daily at midnight
sales/observer:: aggregateSalesReportRefundedData 0 0 * * * Daily at midnight
Sitemap sitemap/observer:: scheduledGenerateSitemaps Google Sitemap→Generation Settings
Directory directory/observer:: scheduledUpdateCurrencyRates Currency Setup→Scheduled Import Settings
CatalogIndex catalogindex/observer:: reindexAll 0 2 * * * Daily at 2 am Yes
catalogindex/observer:: runQueuedIndexing * * * * * Every time cron is run Yes
ProductAlert productalert/observer:: process Catalog→Product Alerts Run Settings
Catalog catalog/product_indexer_price:: reindexAll 0 2 * * * Daily at 2 am
SalesRule salesrule/observer:: aggregateSalesReportCouponsData 0 0 * * * Daily at midnight
Newsletter newsletter/observer:: scheduledSend */5 * * * * Every 5 minutes

 

Esta tabla muestra las tareas que se realizan para la versión 1.4.0.1 , la podemos encontrar en la wiki de magentocommerce aunque la entrada está un poco obsoleta.

Puede que el cron sea añadido a un módulo que hayas creado para algo, o también puede que ese cron sea necesario y crees un módulo únicamente para realizar dicha tarea, con lo cual partimos de que tenemos un módulo o mini módulo, como quieras verlo.

Lo primero que vamos a realizar es la modificación del archivo config.xml de nuestro módulo, este lo podremos encontrar en la carpeta etc.

Añadiremos las siguientes líneas entre los tag  <config> :

  1. <address>00 00 * * *</address><address>manteniminiento/mantenimiento::método</address>

Ahora tenemos que crear el método que se va a ejecutar y que va a realizar las tareas de mantenimiento. Éste se va a llamar Mantenimiento.php y lo vamos a encontrar en app/code/local/nombreCompañia/nombreMódulo/Model/Mantenimiento.php y que va a contener la siguiente clase:

  1. class VC_Mantenimiento_Model_Mantenimiento extends Mage_Core_Model_Abstract{
  2.  
  3. public function desactivar(){
  4.  
  5. //Tareas a realizar por el cron
  6.  
  7. }

Ahora comentaremos una serie de aspectos que tienes que conocer. En la base de datos de nuestro Magento tenemos la tabla cron_schedule, que es donde se encuentra la cola de las tareas con el estado de cada una de ellas, pudiendo ser pendiente, ejecutando, terminada, y si se produjo algún error también lo podemos ver.

Un truquillo que podemos usar para realizar pruebas es usar los log, en el log de Magento podemos almacenar cualquier mensaje, variable,etc.

Para ello desde nuestro cron podremos poner :

Mage::log(‘mensaje’);

Mage::log($variable);

Aquí podremos ver una explicación mas detallada.

Un fuente de donde saqué algo de información: Crear cronjob Magento

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *