
Gestión de tareas programadas con crontab real frente a WP-Cron simulado
En hosting compartido conviven limitaciones técnicas y la necesidad de ejecutar tareas programadas de WordPress (copias de seguridad, publicaciones programadas, limpiezas, syncs). Aquí comparo el WP-Cron simulado con un crontab real, explico cuándo y cómo migrar, y doy ejemplos prácticos y seguros adaptados a entornos compartidos.
Qué es WP-Cron simulado y por qué existe
WordPress implementa un sistema de pseudo-cron conocido como WP-Cron que se activa en cada carga de página para comprobar y ejecutar trabajos programados. Esto evita depender de un cron del sistema en instalaciones donde no hay acceso a «cron» o a tareas programadas del servidor.
WP-Cron es útil en entornos sin acceso a crontab, pero tiene limitaciones visibles:
- Dependencia del tráfico: las tareas sólo se ejecutan cuando hay visitas.
- Imprecisión: los tiempos pueden retrasarse minutos u horas.
- Impacto en rendimiento: ejecución en proceso web puede incrementar tiempos de respuesta.
- Acumulación y picos: tareas demoradas pueden dispararse simultáneamente.
Para entender el concepto general de «cron» a nivel de sistema, consulte la página de referencia: Cron en Wikipedia.
Ventajas del crontab real frente a WP-Cron
Un crontab real, ya sea gestionado por el panel del hosting (cPanel, Plesk) o por un administrador del servidor, ofrece:
- Fiabilidad temporal: ejecución puntual y repetible.
- Desacoplamiento: procesa tareas fuera del ciclo de petición HTTP.
- Control y monitoreo: salida, logs y notificaciones.
- Menor carga en el front-end: evita latencia en páginas por ejecuciones largas.
En entornos compartidos esto reduce picos de uso de CPU en ejecución de php-fpm y evita que las visitas asuman la carga de mantenimiento.
Limitaciones del crontab en hosting compartido
No todo hosting compartido permite libertad total. Entre las restricciones habituales están:
- Límites en la frecuencia mínima (p. ej. mínimo 15 minutos).
- Sin acceso SSH o sin la extensión PHP CLI disponible.
- Políticas que prohíben scripts de larga duración o procesos en segundo plano.
Antes de planificar migrar, verifique el soporte de cron en su panel o consulte al soporte técnico del proveedor.
Cómo migrar: pasos prácticos y seguros
El proceso consiste en desactivar WP-Cron y programar un crontab que ejecute las tareas regularmente. Paso a paso:
1) Desactivar WP-Cron
Edite el archivo wp-config.php y añada:
define('DISABLE_WP_CRON', true);
Con esto evita la ejecución en cada carga de página.
2) Elegir método de ejecución en crontab
En hosting compartido normalmente hay tres alternativas prácticas:
- Invocar la URL
/wp-cron.phpconwgetocurl(actúa como visitante). - Usar PHP CLI para ejecutar un script que incluya
wp-load.php(si PHP CLI está disponible). - Usar un servicio externo o Cron Trigger (por ejemplo, Cloudflare Workers) si el hosting limita cron.
3) Ejemplos de crontab útiles
Ejemplo típico en cPanel (cada 15 minutos):
*/15 * * * * /usr/bin/wget -q -O - "https://example.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
Si curl está disponible y prefiere más control:
*/15 * * * * /usr/bin/curl -s "https://example.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
Si dispone de PHP CLI (ver documentación de PHP CLI):
*/15 * * * * /usr/bin/php -q /home/usuario/public_html/wp-cron-cli.php >/dev/null 2>&1
Donde wp-cron-cli.php contiene un require de wp-load.php y validaciones de seguridad antes de ejecutar tareas.
4) Añadir seguridad: proteger la invocación
No deje /wp-cron.php accesible sin restricciones si lo invoca por web. Recomendaciones:
- Agregar un token secreto en la URL y validarlo en un archivo personalizado que incluya
wp-load.phpantes de ejecutar acciones. - Restringir por IP vía .htaccess si su crontab usa un host fijo.
- Usar HTTPS siempre para evitar exposición de parámetros.
Alternativas al crontab local en hosting compartido
Si su host no permite cron confiables, considere:
- Servicios externos de cron (health checks, ping cron) que llaman su endpoint en intervalos regulares.
- Cloudflare Cron Triggers o Workers para ejecutar tareas programadas desde la CDN; documentación en Cloudflare Docs.
- Tareas programadas con WP-CLI en un servidor remoto si dispone de acceso cron a otro servidor.
Buenas prácticas operativas
Para garantizar robustez y facilidad de mantenimiento en hosting compartido:
- Registre la salida: redirija stdout/stderr a archivos de log para depuración.
- No programe intervalos demasiado cortos: en compartidos 5 minutos suele ser excesivo; 15 minutos es un compromiso.
- Monitoree tiempos de ejecución y tasas de fallos; si detecta errores repetidos, revise plugins y hooks que se ejecutan en cron.
- Evite ejecutar tareas intensivas (backups completos, exportaciones grandes) en horarios de pico; externalícelas o prográmelas en ventana nocturna.
- Compruebe compatibilidad: algunos plugins asumen ejecución desde contexto HTTP; pruebe en staging antes de cambiar producción.
Ejemplo práctico: script seguro para cron con PHP CLI
Un enfoque robusto es crear un archivo cron-runner.php en una carpeta no accesible públicamente. Ejemplo esquemático:
<?php
// validar token opcional
require_once '/home/usuario/public_html/wp-load.php';
// Ejecutar hooks que WordPress programó
wp_maybe_auto_update(); // ejemplo: no es un patrón general
// Mejor: invocar funciones que disparen eventos o usar WP-CLI para mayor control
?>
Nota: la carga directa de WordPress por CLI puede comportarse distinto en comparación con ejecución web. Para correr tareas de cron específicas, WP-CLI ofrece comandos más seguros (instale en entorno que lo permita).
Monitoreo y resolución de problemas
Si las tareas no se ejecutan:
- Verifique que DISABLE_WP_CRON esté activo y que el crontab esté creado correctamente.
- Revise permisos de archivos y rutas absolutas en crontab.
- Compruebe que PHP CLI exista y su versión sea compatible con WordPress; vea PHP CLI.
- Analice logs del servidor y de su crontab; capture la salida para diagnosticar errores.
Resumen: cuándo elegir cada opción
- Use WP-Cron simulado cuando no tenga acceso a cron y la precisión no sea crítica (sitios pequeños con tráfico regular).
- Opte por crontab real cuando precise puntualidad, menor carga en peticiones web y control operativo (hosting que lo permita).
- Si el hosting limita cron, combine cron externo seguro o servicios CDN con triggers como alternativa (vea la opción de Cloudflare Cron Triggers).
Consideraciones finales
En hosting compartido, la decisión entre WP-Cron y crontab real depende de acceso, tolerancia a la latencia y políticas del proveedor. Movilizar a un crontab real mejora la fiabilidad y el rendimiento, pero exige implementar medidas de seguridad y monitorización. Empiece por desactivar WP-Cron en staging, pruebe la invocación por URL o CLI, registre salidas y ajuste la frecuencia según las restricciones del proveedor.
Lecturas y referencias
Para profundizar en la operación de cron a nivel de sistema y herramientas relacionadas, consulte la documentación oficial de Cron y la guía de PHP CLI. Para alternativas basadas en la CDN y la nube, la guía de Cloudflare Cron Triggers es una buena referencia.
Conclusión
La mejor práctica en hosting compartido es priorizar la fiabilidad: cuando el entorno lo permite, desactive WP-Cron y programe un crontab real (o use alternativas externas controladas). Este cambio reduce la carga en las peticiones HTTP, mejora la puntualidad de las tareas y facilita el monitoreo. Si su hosting restringe cron, evalúe soluciones híbridas—invocaciones seguras por URL, scripts CLI o triggers externos—y siempre implemente logs y tokens de seguridad para proteger sus endpoints.