Solucionar problemas

Prestashop, el directorio "cache" consume espacio de forma descontrolada

Revisado el · cache · espacio · prestashop

El directorio cache almacena los ficheros estáticos que Prestashop genera en base a las plantillas, consultas SQL, etc, el objetivo es mejorar el rendimiento de la aplicación, estos ficheros son eliminados por Prestashop de forma automática según estima.

No obstante, bajo algunas circunstancias hemos visto como el directorio cache de Prestashop empieza a ocupar cantidades desorbitadas de espacio, creciendo en consumo sin ningún control aparente.

Es en estos casos que se hace necesario vaciar su contenido cada cierto tiempo.

Eliminación manual

Antes de actuar, confirma en el panel de PrestaShop que se trata de la caché y usa su función soportada para vaciarla. Si no está disponible, crea una copia bajo demanda y verifica la ruta absoluta de la instalación.

En vez de borrar directamente, renombra cada directorio a una cuarentena fechada y crea de nuevo el directorio vacío con los mismos permisos. Trabaja únicamente sobre estas rutas exactas dentro de la instalación comprobada:

  • cache/cachefs
  • cache/smarty/compile
  • cache/smarty/cache

Eliminación automática

No programes un rm -rf con una ruta relativa. El script debe fallar de forma cerrada: ruta absoluta fija, comprobación de realpath, marcador de PrestaShop, cd &&, log y cuarentena recuperable.

Este ejemplo empieza en modo de observación. Sustituye la ruta exacta, guárdalo fuera del directorio público con permisos 700 y ejecútalo manualmente:

#!/bin/sh
set -eu

APP=/home/usuario_cpanel/public_html
EXPECTED=/home/usuario_cpanel/public_html
LOG=/home/usuario_cpanel/prestashop-cache.log
DRY_RUN=1

test "$(realpath "$APP")" = "$EXPECTED" || exit 1
test -f "$APP/config/settings.inc.php" || exit 1
cd "$APP" && test "$(pwd -P)" = "$EXPECTED" || exit 1

for dir in cache/cachefs cache/smarty/cache cache/smarty/compile; do
    test -d "$dir" || exit 1
    printf '%s\n' "$(date -Is) PREVIEW $EXPECTED/$dir $(du -sh "$dir" | cut -f1)" >> "$LOG"
done

test "$DRY_RUN" = 0 || exit 0

stamp=$(date +%Y%m%d-%H%M%S)
quarantine="$APP/cache-quarantine-$stamp"
mkdir -m 700 "$quarantine"

for dir in cache/cachefs cache/smarty/cache cache/smarty/compile; do
    target="$quarantine/$(printf '%s' "$dir" | tr / _)"
    mv "$dir" "$target"
    mkdir -p "$dir"
    printf '%s\n' "$(date -Is) MOVED $EXPECTED/$dir TO $target" >> "$LOG"
done

Revisa el log y el tamaño durante al menos una ejecución con DRY_RUN=1. Después crea una copia verificada, cambia a DRY_RUN=0, ejecuta manualmente y comprueba el frontal, el administrador, imágenes, pedidos y errores antes de programarlo en cron.

Conserva la cuarentena durante el periodo de recuperación. Si la web falla, detén la tarea, retira los directorios vacíos y devuelve cada carpeta desde la cuarentena usando el log. Elimina la cuarentena únicamente después de verificar la aplicación y disponer de otra copia recuperable.

También te puede ayudar

  1. Uso excesivo de espacio en el directorio var/cache de PrestaShop
  2. Error "An error occurred while sending the message" al enviar desde el formulario de contacto de Prestashop
  3. Error instalando módulos en PrestaShop, The file is missing
  4. La actualización de Prestashop desde 1-Click Upgrade muestra el error "Por favor, corrige el (los) siguiente(s) error(es)"