Ir al contenido

WP-Cron no se está ejecutando

Vulnity Security programa sus comprobaciones de heartbeat mediante WP-Cron, el sistema de tareas interno de WordPress. Esta guía cubre los avisos que aparecen cuando esas tareas programadas están desactivadas o no se ejecutan de forma fiable.

Usa esta guía si Vulnity muestra mensajes como:

  • External cron required
  • Heartbeat schedule missing
  • Heartbeat delayed
  • Traffic fallback active
  • No recent heartbeat success

Si en cambio ves Traffic fallback covering monitoring o External cron confirmed, son informativos: la monitorización está confirmada y no requieren acción (mira Vulnity lo cura automáticamente).

Vulnity envía heartbeats periódicos desde WordPress para confirmar que la web sigue conectada.

Esos heartbeats se programan mediante las tareas internas de WordPress. Si WP-Cron está desactivado, bloqueado o no se ejecuta con regularidad, la web puede aparecer como desconectada aunque el plugin siga instalado.

Esto también puede afectar a otras tareas de WordPress, como emails diferidos, copias de seguridad, publicaciones programadas, actualizaciones, tareas de caché y procesos de WooCommerce.

Configura un cron real del servidor que llame a wp-cron.php de forma periódica.

Esta es la configuración recomendada cuando DISABLE_WP_CRON está activado en wp-config.php.

  1. Accede al panel de control del hosting.
  2. Busca Cron Jobs, Tareas programadas o una sección similar.
  3. Crea una tarea que se ejecute cada 5 o 10 minutos.
  4. Configúrala para llamar a:
https://example.com/wp-cron.php?doing_wp_cron

Sustituye example.com por el dominio real.

Desde el editor de cron del servidor, añade:

Ventana de terminal
*/10 * * * * curl -fsS https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Sustituye example.com por el dominio real.

Si curl no está disponible, usa wget:

Ventana de terminal
*/10 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Asegúrate de que las peticiones a wp-cron.php no están bloqueadas por:

  • Reglas del firewall del hosting.
  • Reglas del WAF.
  • Plugins de seguridad.
  • Autenticación básica.
  • Restricciones por IP.
  • Reglas de caché que bloqueen ejecución PHP.

Desde el plugin 1.4.0 el fallback por tráfico es auto-curativo. Cuando la web recibe visitas al admin o tráfico público y el último heartbeat está desactualizado, el plugin:

  1. Envía un heartbeat no bloqueante para que el panel de Vulnity siga viendo la web online.
  2. Intenta ejecutar la comprobación programada real en una petición aparte (relanzando WP-Cron directamente, o mediante un runner interno de un solo uso) para que el heartbeat quede confirmado y el aviso se limpie solo, sin añadir latencia a las visitas.

Gracias a esto, la mayoría de los fallos puntuales de WP-Cron se arreglan solos sin hacer nada:

MensajeQué hacer
Traffic fallback covering monitoringNada — la monitorización está confirmada a través del fallback. Un cron externo sigue siendo la configuración recomendada.
External cron confirmedNada — los heartbeats se confirman según lo programado incluso con DISABLE_WP_CRON.
Traffic fallback active, Heartbeat delayed, External cron required, Heartbeat schedule missing, No recent heartbeat successSigue esta guía. El aviso global solo aparece tras más de 24 horas sin un heartbeat confirmado.

El fallback necesita tráfico: no sustituye a un cron real en webs sin tráfico o con muy poca actividad.

Señales de éxito:

  • El aviso de Vulnity desaparece.
  • El panel de WordPress muestra WP-Cron healthy.
  • La web se mantiene conectada en Vulnity sin reactivaciones manuales.
  • Los heartbeats llegan varias veces al día en vez de solo tras acciones manuales.