🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Automatización de Tareas en PrestaShop con Cron Jobs y Scripts

Actualizado el 14 de octubre de 2025

La gestión de una tienda online en PrestaShop puede consumir una cantidad ingente de tiempo si se realiza de forma manual. Tareas como la actualización de stocks, la sincronización de productos, la generación de informes o el envío de campañas de email marketing son esenciales, pero repetitivas. Aquí es donde entra en juego la automatización PrestaShop mediante cron jobs y scripts.

Este artículo es una guía técnica completa para SysAdmins y desarrolladores que desean liberar recursos, reducir errores humanos y escalar sus operaciones de ecommerce. Aprenderás a configurar tareas programadas, escribir scripts robustos y conectar tu tienda con sistemas externos.

¿Por qué automatizar PrestaShop con Cron Jobs?

Un cron job es una tarea programada en un sistema operativo Unix/Linux que ejecuta un script o comando en intervalos definidos (cada hora, cada día, cada minuto). Combinado con scripts PrestaShop, permite realizar operaciones sin intervención manual.

[INFO] La mayoría de servidores compartidos y VPS incluyen soporte para cron jobs. En entornos cloud como AWS o Google Cloud, se pueden usar Cloud Scheduler o Lambda.

Beneficios clave de la automatización

  • Ahorro de tiempo: Elimina la necesidad de loguearte cada día para actualizar precios o stocks.
  • Precisión: Los scripts no cometen errores de tipeo ni olvidan pasos.
  • Escalabilidad: Puedes gestionar catálogos con miles de productos sin esfuerzo adicional.
  • Disponibilidad 24/7: Las tareas se ejecutan incluso cuando no estás frente al ordenador.

Configuración del entorno: Lo que necesitas saber

Antes de escribir un solo script, debes entender el ecosistema de PrestaShop y tu servidor.

Requisitos técnicos

  • Servidor con acceso SSH y capacidad para ejecutar PHP desde la línea de comandos (CLI).
  • PrestaShop 1.7 o 8.x (aunque los conceptos aplican a versiones anteriores).
  • PHP instalado con las extensiones necesarias (curl, json, pdo_mysql, simplexml).
  • Cron habilitado (verifica con crontab -e o el panel de control de tu hosting).

Estructura de directorios relevante

Los scripts que crees deben residir fuera de la carpeta admin y preferiblemente en una carpeta dedicada como /scripts/ o /cron/ en la raíz de PrestaShop.

/var/www/html/mitienda/
├── admin12345/
├── classes/
├── config/
├── cron/          <-- Tus scripts aquí
├── modules/
├── override/
├── tools/
└── index.php

[WARNING] Nunca coloques scripts ejecutables dentro de la carpeta admin o expongas contraseñas en archivos accesibles desde la web.

Creando tu primer script PrestaShop para automatización

Vamos a escribir un script PHP que se conecte al núcleo de PrestaShop y realice una tarea concreta: actualizar el stock de un producto.

Conexión al contexto de PrestaShop

Para que un script externo funcione, debe cargar el framework de PrestaShop. El archivo config/config.inc.php es la puerta de entrada.

<?php
// /var/www/html/mitienda/cron/actualizar_stock.php

// 1. Cargar el núcleo de PrestaShop
define('_PS_ADMIN_DIR_', getcwd());
require_once dirname(__FILE__) . '/../config/config.inc.php';
require_once dirname(__FILE__) . '/../init.php';

// 2. Verificar que estamos en CLI (seguridad)
if (php_sapi_name() !== 'cli') {
    die('Este script solo puede ejecutarse desde la línea de comandos.');
}

// 3. Configurar el contexto
Context::getContext()->shop = new Shop((int)Configuration::get('PS_SHOP_DEFAULT'));

// 4. Lógica de actualización
$id_product = 123; // ID del producto
$new_quantity = 50;

$product = new Product($id_product);
if (Validate::isLoadedObject($product)) {
    $product->quantity = $new_quantity;
    $product->save();
    echo "Stock actualizado correctamente.\n";
} else {
    echo "Producto no encontrado.\n";
}
?>

Probando el script manualmente

Ejecuta desde la terminal:

cd /var/www/html/mitienda
php cron/actualizar_stock.php

Si todo funciona, verás el mensaje de éxito.

Automatización de tareas comunes con Cron Jobs

Una vez que tienes scripts funcionales, es hora de programarlos. El archivo crontab se edita con crontab -e.

Sintaxis básica de Cron

minuto hora día-del-mes mes día-de-la-semana comando

Ejemplo para ejecutar un script cada día a las 3:00 AM:

0 3 * * * /usr/bin/php /var/www/html/mitienda/cron/actualizar_stock.php >> /var/log/prestashop_cron.log 2>&1

Tareas programadas esenciales para tu tienda

1. Gestión de inventario automática

Mantener el stock sincronizado con tu ERP o proveedor es una de las tareas más críticas.

// cron/sync_inventario.php
// Este script lee un archivo CSV de un proveedor y actualiza cantidades
$csv_file = '/tmp/inventario_proveedor.csv';
if (($handle = fopen($csv_file, 'r')) !== false) {
    while (($data = fgetcsv($handle, 1000, ',')) !== false) {
        $sku = $data[0];
        $qty = (int)$data[1];
        
        $id_product = Product::getIdByReference($sku);
        if ($id_product) {
            $product = new Product($id_product);
            $product->quantity = $qty;
            $product->save();
        }
    }
    fclose($handle);
}

Programación recomendada: cada 30 minutos.

*/30 * * * * /usr/bin/php /var/www/html/mitienda/cron/sync_inventario.php

2. Generación de informes de ventas

Un script que genere un resumen diario y lo envíe por correo.

// cron/informe_diario.php
$ventas_hoy = Db::getInstance()->getValue('
    SELECT SUM(total_paid_tax_incl) 
    FROM '._DB_PREFIX_.'orders 
    WHERE date_add >= CURDATE()
');

$pedidos_hoy = Db::getInstance()->getValue('
    SELECT COUNT(*) 
    FROM '._DB_PREFIX_.'orders 
    WHERE date_add >= CURDATE()
');

$mensaje = "Resumen del día:\n";
$mensaje .= "Ventas: $ventas_hoy €\n";
$mensaje .= "Pedidos: $pedidos_hoy\n";

mail('tuemail@dominio.com', 'Informe diario PrestaShop', $mensaje);

[TIP] Usa la librería PHPMailer o el propio Mail::Send() de PrestaShop para un envío más robusto.

3. Limpieza de carritos abandonados

Identificar y notificar a usuarios con carritos no finalizados.

-- Consulta SQL para obtener carritos abandonados (más de 24h)
SELECT id_cart, id_customer 
FROM ps_cart 
WHERE date_upd < DATE_SUB(NOW(), INTERVAL 1 DAY) 
  AND id_customer > 0;

El script PHP puede luego enviar un email de recordatorio o incluso aplicar un descuento automático.

Buenas prácticas y seguridad en scripts PrestaShop

La automatización PrestaShop no debe comprometer la seguridad de tu tienda.

Registro de actividades (logging)

Siempre redirige la salida de los cron jobs a un archivo de log para depuración.

0 3 * * * /comando >> /var/log/prestashop_cron.log 2>&1

Dentro del script, usa error_log() o un logger personalizado.

function log_msg($msg) {
    $log_file = _PS_ROOT_DIR_ . '/var/logs/cron.log';
    file_put_contents($log_file, date('Y-m-d H:i:s') . ' - ' . $msg . "\n", FILE_APPEND);
}

Protección contra ejecución múltiple

Si un cron job se ejecuta antes de que el anterior termine, puedes tener inconsistencias. Usa un archivo de bloqueo (lock file).

$lock_file = '/tmp/mi_script.lock';
if (file_exists($lock_file)) {
    $pid = file_get_contents($lock_file);
    if (posix_kill($pid, 0)) {
        die("El script ya está en ejecución (PID: $pid).\n");
    }
}
file_put_contents($lock_file, getmypid());
// ... lógica del script ...
unlink($lock_file);

Gestión de errores y notificaciones

Implementa un sistema de alertas. Si un script falla, que te avise por email o Slack.

try {
    // ... lógica ...
} catch (Exception $e) {
    mail('admin@dominio.com', 'Error en cron', $e->getMessage());
    log_msg('ERROR: ' . $e->getMessage());
}

Integración con módulos y API externas

La automatización PrestaShop se potencia cuando conectas tu tienda con servicios externos.

Ejemplo: Actualización de precios desde una API

// cron/actualizar_precios_api.php
$api_url = 'https://api.proveedor.com/precios?token=XXXX';
$response = file_get_contents($api_url);
$precios = json_decode($response, true);

foreach ($precios as $item) {
    $id_product = Product::getIdByReference($item['sku']);
    if ($id_product) {
        $product = new Product($id_product);
        $product->price = $item['price'];
        $product->save();
    }
}

Uso de la Web Service de PrestaShop

Para tareas más complejas (crear productos, gestionar clientes), puedes usar la API REST de PrestaShop desde un script externo.

# Ejemplo con curl
curl -X GET -u "API_KEY:" "https://tutienda.com/api/products/?display=full&filter[id]=1"

Resolución de problemas comunes

El script no se ejecuta desde cron pero sí manualmente

  • Verifica la ruta absoluta al binario de PHP: which php.
  • Asegúrate de que el script tiene permisos de ejecución: chmod +x script.php.
  • Revisa los logs del sistema: grep CRON /var/log/syslog.

Error de conexión a la base de datos

PrestaShop usa la configuración de config/settings.inc.php. Si el script se ejecuta desde otro directorio, la ruta relativa puede fallar. Usa rutas absolutas.

Tiempo de ejecución excesivo

Para tareas largas (sincronización de miles de productos), considera:

  • Dividir la tarea en lotes (chunks).
  • Aumentar el tiempo máximo de ejecución en PHP: set_time_limit(0);.
  • Usar la función ignore_user_abort(true);.

Automatización avanzada con herramientas modernas

Más allá de los cron jobs básicos, puedes implementar soluciones más sofisticadas.

Uso de Supervisor (gestor de procesos)

Supervisor mantiene procesos en ejecución y los reinicia si fallan.

[program:prestashop_sync]
command=php /var/www/html/mitienda/cron/sync_inventario.php
autostart=true
autorestart=true
stderr_logfile=/var/log/prestashop_err.log
stdout_logfile=/var/log/prestashop_out.log

Colas de trabajo con RabbitMQ o Redis

Para tareas asíncronas (envío masivo de emails, generación de PDFs), implementa un sistema de colas.

// Publicar un trabajo en Redis
$redis->lpush('queue:email', json_encode(['id_order' => 123, 'template' => 'order_conf']));

Un worker separado consume la cola y procesa los trabajos.

Conclusión: Lleva tu tienda al siguiente nivel

La automatización PrestaShop con cron jobs y scripts no es un lujo, es una necesidad para cualquier tienda que aspire a crecer. Desde la gestión inventario hasta la generación de informes, cada tarea programada libera tiempo para que te centres en lo importante: tu negocio.

Empieza con scripts pequeños, pruébalos exhaustivamente y ve ampliando tu arsenal de tareas programadas. Tu tienda (y tu sueño) te lo agradecerán.

[INFO] ¿Quieres profundizar? Consulta la documentación oficial de PrestaShop sobre Db::getInstance() y la clase Product para más ejemplos de scripts. La comunidad de PrestaShop también tiene módulos gratuitos para gestión de cron jobs desde el panel de administración.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel