UA-51298262-10 Skip to main content
WordPress

Cron Jobs en Linux para WordPress: Guía de Configuración

By septiembre 18, 2026No Comments
Cron Jobs en Linux para WordPress: Guía de Configuración

Qué son los cron jobs y por qué WordPress los necesita

Un cron job en WordPress es, en esencia, una tarea que el servidor ejecuta solo y a las horas que tú decidas. Publicar una entrada programada, buscar actualizaciones de plugins, mandar los correos de WooCommerce, hacer una copia de seguridad, vaciar cachés… cosas así. WordPress trae de serie su propio sistema para esto, WP-Cron, y funciona, sí. Pero tiene limitaciones serias que conviene conocer antes de ponerse a configurar nada.

El problema es sencillo: WP-Cron no es un cron de verdad. Se dispara cuando alguien visita tu web. Sin visitas, no hay tareas (o llegan tarde). Con muchas visitas, se dispara demasiado, y eso consume recursos que no hacen falta. La solución que usan los sitios serios pasa por desactivar WP-Cron y crear un cron job real en Linux, mediante el daemon cron del sistema.

Cómo funciona WP-Cron y sus limitaciones

WP-Cron (wp-cron.php) se lanza en cada carga de página mediante una llamada HTTP loopback al propio sitio. Y de ahí salen tres problemas bastante habituales:

  • Retrasos en tareas: una entrada programada puede publicarse tarde si nadie visita el sitio a la hora prevista.
  • Rendimiento degradado: en sitios con tráfico alto, wp-cron.php puede invocarse cientos de veces por minuto.
  • Fallos silenciosos: si la llamada loopback falla (un firewall que la bloquea, problemas de DNS), las tareas simplemente dejan de ejecutarse. Sin aviso. Eso es lo peor.
Dato útil: en un sitio con 50.000 visitas diarias, wp-cron.php puede llegar a ejecutarse más de 2.000 veces por hora de forma innecesaria, porque basta con lanzarlo cada 5 o 15 minutos.

Paso 1: Desactivar WP-Cron en wp-config.php

Lo primero es cortar el disparo por visitas. Abre el archivo wp-config.php, que está en la raíz de tu instalación, y añade esta línea justo antes del comentario que dice «eso es todo, deja de editar»:

define( ‘DISABLE_WP_CRON’, true );

Guardas y listo. A partir de ahora WordPress ya no lanzará wp-cron.php en cada visita. Ojo: el sistema de tareas programadas sigue funcionando igual. Lo único que cambia es quién lo invoca.

Paso 2: Crear el cron job en el servidor Linux

Acceder al crontab

Conéctate al servidor por SSH y abre el crontab del usuario que ejecuta la web (por ejemplo, www-data en Debian/Ubuntu):

sudo crontab -u www-data -e

Si gestionas el sitio con tu propio usuario, con crontab -e vale. Se abrirá el editor por defecto, y ahí añades la línea de programación.

Sintaxis de un cron job

Cada línea del crontab sigue este formato:

  • Minuto: 0-59
  • Hora: 0-23
  • Día del mes: 1-31
  • Mes: 1-12
  • Día de la semana: 0-7 (0 y 7 son domingo)

Así, */15 * * * * quiere decir «cada 15 minutos, todos los días». Nada más.

La línea recomendada para WordPress

La forma más limpia de invocar wp-cron.php es mediante WP-CLI, que evita la sobrecarga de HTTP:

*/5 * * * * cd /var/www/tusitio/htdocs && wp cron event run –due-now >> /var/log/wp-cron.log 2>&1

¿No tienes WP-CLI instalado? (Deberías, la verdad.) Entonces puedes usar PHP directamente:

*/5 * * * * /usr/bin/php /var/www/tusitio/htdocs/wp-cron.php >/dev/null 2>&1

Consejo: comprueba que usas el ejecutable PHP-CLI correcto (php -v te lo dice). Si tu sitio va con PHP 8.2 pero el CLI por defecto es 7.4, apunta explícitamente a la ruta, por ejemplo /usr/bin/php8.2.

Ejemplos de cron jobs útiles para WordPress

Copia de seguridad nocturna de la base de datos

0 3 * * * mysqldump -u usuario -p’CONTRASEÑA’ nombre_bd | gzip > /backups/db-$(date +\%F).sql.gz

La copia a las 3:00 AM, cuando el tráfico está en su mínimo. No olvides escapar el símbolo de porcentaje con barra invertida dentro de crontab, o el comando se cortará a mitad.

Backup completo semanal de archivos

0 4 * * 0 tar -czf /backups/files-$(date +\%F).tar.gz /var/www/tusitio/htdocs/wp-content

Verificación de actualizaciones con WP-CLI

0 6 * * * cd /var/www/tusitio/htdocs && wp core check-update –quiet

Comprobación y depuración de cron jobs

Verificar que el cron se ejecuta

Los logs del sistema te dirán si cron está procesando tus tareas:

  • En Debian/Ubuntu: grep CRON /var/log/syslog
  • En sistemas con systemd: journalctl -u cron -f

Comprobar eventos programados desde WordPress

Con WP-CLI puedes listar las tareas programadas y las pendientes:

  • wp cron event list: muestra todos los eventos programados.
  • wp cron event run –due-now: ejecuta solo los vencidos.
  • wp cron schedule list: lista los intervalos registrados.

Si un evento aparece con fecha del pasado, no se está ejecutando. Revisa los permisos del usuario, la ruta de PHP y el registro de errores. Suele ser una de esas tres cosas.

Buenas prácticas para cron jobs en WordPress

  • Evita frecuencias excesivas: cada 5 minutos sobra para la mayoría de sitios. Cada minuto solo si tienes colas de correos o sincronizaciones críticas.
  • Usa rutas absolutas siempre: cron tiene un entorno mínimo, sin las variables de tu shell habitual.
  • Redirige la salida: >/dev/null 2>&1 evita correos del sistema; un log te permite auditar errores después.
  • Escapa los % en crontab: deben ir como \% o el comando se cortará sin más.
  • Protege wp-cron.php: con DISABLE_WP_CRON activo, puedes bloquear el acceso directo por HTTP desde .htaccess o nginx. Un extra de seguridad barato.
  • Documenta cada tarea: añade comentarios en el crontab explicando qué hace cada línea. Tu yo del futuro lo agradecerá, créeme.

Errores comunes al configurar cron jobs WordPress

Permisos incorrectos

Si ejecutas el cron como root, los archivos que genere (logs, backups, cachés) pertenecerán a root y WordPress no podrá escribirlos. Ejecuta siempre el cron con el mismo usuario propietario de los archivos del sitio.

PATH inexistente en el entorno cron

Cron no carga tu .bashrc. Por eso comandos como wp o php pueden no encontrarse. Usa rutas absolutas (/usr/local/bin/wp) o define PATH al inicio del crontab: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Sobrecarga por duplicación

Este me ha pasado a mí más de una vez: DISABLE_WP_CRON en false y, encima, el cron job activo. Resultado, wp-cron se ejecuta por partida doble. Verifica que solo un mecanismo esté operativo.

Preguntas frecuentes

¿Cada cuánto tiempo debo ejecutar el cron de WordPress?
Cada 5 minutos es el estándar recomendado. Sitios con WooCommerce o boletines pueden necesitar intervalos menores, pero rara vez hace falta bajar al minuto.

¿Puedo configurar cron jobs en hosting compartido?
Sí, casi todos los paneles (cPanel, Plesk) lo permiten. Ahí usa el método HTTP con wget o curl: */5 * * * * wget -q -O – https://tusitio.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

¿Desactivar WP-Cron rompe los plugins?
No. Los plugins siguen programando tareas igual de siempre; lo único que cambia es quién dispara la ejecución. Los retrasos desaparecen y la fiabilidad mejora.

Conclusión

Sustituir WP-Cron por cron jobs reales en Linux es, quizá, una de las optimizaciones con mejor relación esfuerzo/beneficio para cualquier WordPress con cierta seriedad. Todo se reduce a tres pasos: desactivar el disparo por visitas con DISABLE_WP_CRON, crear una entrada en el crontab con la frecuencia adecuada y verificar que funciona mediante logs y WP-CLI. Con eso tienes publicaciones, backups y tareas de mantenimiento ejecutándose cuando toca, y una carga de servidor bastante menor si tu sitio tiene tráfico.

Y si prefieres no tocar el crontab de tu servidor, o si tras la configuración las tareas siguen sin ejecutarse bien, en RedServicio (redservicio.net) tenemos especialistas en administración de sistemas y WordPress que pueden auditar y configurar tus cron jobs de forma profesional, garantizando que cada tarea se ejecute exactamente cuando debe.