Alojamiento web

Cron (y WP-Cron)

Definición

Cron es el programador de tareas de los sistemas Unix y Linux: lanza comandos a horas fijas según una tabla llamada crontab. WP-Cron es el mecanismo interno de WordPress para las tareas programadas (publicaciones, actualizaciones, copias de seguridad, correos); no tiene reloj propio y solo se ejecuta cuando se carga una página.

Cron (y WP-Cron), Alojamiento web

El nombre viene del griego chronos, el tiempo. En un servidor Linux, el demonio cron lee unas tablas de tareas y lanza cada comando en el momento previsto: una copia de seguridad cada noche, la renovación de un certificado de Let’s Encrypt, la limpieza de archivos temporales. WordPress necesita el mismo servicio, pero no puede contar con acceso al cron del sistema, que algunos hostings no ofrecen. Por eso tiene su propio mecanismo, WP-Cron.

La sintaxis de una crontab

Cada línea empieza por cinco campos: minuto (0 a 59), hora (0 a 23), día del mes (1 a 31), mes (1 a 12) y día de la semana (0 a 7, donde 0 y 7 son el domingo), seguidos del comando. Un asterisco significa «cada», y */15 en el campo de los minutos lanza la tarea en los minutos 0, 15, 30 y 45.

*/15 * * * * comando-cada-15-minutos
0 3 * * * comando-cada-noche-a-las-3

Cómo funciona WP-Cron

Según la documentación de WordPress, WP-Cron revisa en cada carga de página la lista de tareas programadas y ejecuta las que tocan. Los intervalos que trae por defecto son hourly, twicedaily, daily y weekly; los plugins añaden otros. Este funcionamiento tiene dos consecuencias. Si nadie visita el sitio, no se ejecuta nada: una tarea prevista a las 14:00 puede esperar hasta las 17:00, como señala la documentación. No se pierde, eso sí: se lanza en la siguiente visita. Al contrario, en un sitio con mucho tráfico, la comprobación se hace sin parar.

Comparativa entre WP-Cron y el cron del sistema. WP-Cron: se dispara al cargar una página, una tarea prevista a las 14:00 puede esperar a la siguiente visita, un sitio con pocas visitas acumula retraso, un sitio muy visitado hace la comprobación en cada página, activo por defecto sin ajustes. Cron del sistema: lo dispara el reloj del servidor, a intervalos regulares, independiente del tráfico, se activa definiendo DISABLE_WP_CRON en wp-config.php y añadiendo una línea de crontab que lanza wp cron event run --due-now o llama a wp-cron.php.
WP-Cron depende de las visitas; el cron del sistema sigue el reloj.

Afecta a la publicación de las entradas programadas, a las comprobaciones y actualizaciones automáticas, a las copias de seguridad de los plugins, al envío de boletines o a los informes de seguridad.

Pasar al cron del sistema

La solución que recomienda la documentación es desactivar el disparo por visitas en wp-config.php:

define( 'DISABLE_WP_CRON', true );

y después encargar el lanzamiento al cron del servidor, con una petición a wp-cron.php o, si el proveedor ofrece WP-CLI, con un comando que ejecuta todas las tareas pendientes evitando ejecuciones solapadas:

*/5 * * * * cd /ruta/del/sitio && wp cron event run --due-now --quiet

En un alojamiento compartido, el panel suele tener un apartado «Tareas cron» para añadir esta línea sin terminal.

Vídeo: «Cómo desactivar cron WordPress - Fichero wp-cron.php» (webempresa.com)

Para WordPress

  • Mantén un intervalo razonable, de 5 a 15 minutos: una ejecución cada minuto carga sin necesidad un servidor pequeño.
  • Comprueba que la tarea del sistema funciona antes de olvidarte: una vez definido DISABLE_WP_CRON, no se ejecuta nada si la línea de crontab es incorrecta. wp cron event list muestra los próximos vencimientos y revela las tareas atrasadas.
  • Cuidado con las copias: en un entorno de staging, las tareas programadas pueden enviar correos a clientes reales o sincronizar datos externos. Desactívalas o neutraliza los envíos.
  • Las copias de seguridad programadas por un plugin dependen de WP-Cron: comprueba que se hacen de verdad, para cumplir tu estrategia de copias de seguridad.

Errores frecuentes

Una tarea desconocida en la lista de eventos programados merece un examen: algunos códigos maliciosos se reinstalan mediante una tarea programada después de cada limpieza.

Fuentes

  1. Plugin Handbook: Cron (enlace externo, se abre en una pestaña nueva)
  2. Plugin Handbook: Hooking WP-Cron Into the System Task Scheduler (enlace externo, se abre en una pestaña nueva)
  3. WP-CLI Commands: wp cron event run (enlace externo, se abre en una pestaña nueva)
  4. Linux manual page: crontab(5) (enlace externo, se abre en una pestaña nueva)

Todas las definiciones

Seguridad de WordPress, sin ruido

Un correo cuando importa: nuevos ataques observados, actualizaciones de la extensión y guías prácticas. Sin spam, baja con un clic.

Empieza gratis y pasa a Pro cuando estés listo

La versión gratuita ya oculta WordPress y cambia la dirección de la página de acceso. Pro añade alias, verificación en dos pasos y supervisión.