Schedule, de JESHOOTS.com

Cron es una herramienta en sistemas UNIX (Linux, Mac, etc) que sirve para programar tareas y que se ejecuten de forma automática cuando llegue el momento. Normalmente se usa para programar tareas periódicas (por ejemplo, comprobar si existen actualizaciones de sistema, descargar los emails del servidor a mi gestor de correo local o realizar copias de seguridad), aunque también puede usarse para ejecutar tareas puntuales (como, por ejemplo, preparar el equipo para que descargue un fichero de Internet durante la noche).

Como puedes imaginar, también WordPress necesita poder ejecutar tareas de forma periódica. Un par de ejemplos clásicos de ello son la publicación de entradas programadas o la instalación de actualizaciones automáticas del core. Aunque en teoría debería ser posible usar la herramienta cron del servidor donde WordPress está alojado, esta puede no estar disponible por múltiples motivos, así que el equipo del Core de WordPress implementó su propia solución para programar y ejecutar tareas de forma periódica: WP-Cron.

WP-Cron

WP-Cron es una pequeña funcionalidad incluida en el núcleo de WordPress que se usar para programar y ejecutar tareas (tanto puntuales como periódicas). Como te digo, existen varias características de WordPress que usan WP-Cron (publicación de entradas, actualizaciones, etc), pero también puede ser usado (y abusado) por los plugins que tengas instalados.

El funcionamiento de WP-Cron es muy sencillo. Cada vez que un visitante accede a alguna página de WordPress, WP-Cron se activa y comprueba si hay alguna tarea programada que deba ejecutarse. Si la hay, WordPress la ejecuta durante el proceso de atender a la petición de dicho usuario.

Peligros de WP-Cron

El primer peligro que tenemos con WP-Cron es debido a una limitación técnica. Dado que WP-Cron únicamente se ejecuta cuando un visitante pide una página, es posible que en webs con bajo tráfico una tarea esté programada para ejecutarse en un cierto momento, pero que dicha tarea no se ejecute hasta que un visitante llegue a tu web. Por ejemplo, podrías programar una tarea para el próximo sábado a las 8 de la mañana, pero si el primer visitante del sábado no llega hasta las 3 de la tarde, la tarea no se ejecutaría hasta las 3.

El segundo peligro al que nos enfrentamos con WP-Cron es que las tareas programadas tienen un impacto negativo en los tiempos de carga de tu web. Si un visitante llega a tu web y WP-Cron se pone a ejecutar una tarea lenta durante la petición de dicho visitante, WordPress tardará más de lo habitual en servirle la página (porque no podrá hacerlo hasta que no complete la tarea ¡o las tareas, en plural! programadas).

El tercer peligro que podemos encontrar con WP-Cron es que las tareas no lleguen a ejecutarse jamás. Si disponemos de un sistema de cache o nuestra web está detrás de un CDN, es posible que la propia cache satisfaga las peticiones entrantes y no sea necesario pedirle a WordPress que genere la página. La consecuencia de esto es obvia: si no hay necesidad de que WordPress se ejecute, no hay forma de que las tareas se ejecuten tampoco (ya que, recordemos, «WP-Cron se ejecuta cuando WordPress está sirviendo una página a un visitante»).

Nelio Unlocker

Pásate a WordPress manteniendo tus diseños y contenidos

Mejora hoy mismo el SEO de tu web y acelera su velocidad de carga convirtiendo tus páginas a estándares HTML, CSS y WordPress. No necesitas conocimientos técnicos y solo pagarás por aquello que necesites.

Solución a los problemas de WP-Cron

Estos tres problemas de WP-Cron son bien conocidos por todos y, por ello, existe una solución para mitigarlos por completo. Básicamente, hay que desactivar WP-Cron para que no se ejecute cuando hay peticiones a una página y hay que configurar una herramienta externa (el cron de nuestro servidor) para que lance una petición específica a WordPress con la que, ahora sí, ejecutar las tareas programadas pendientes.

Te dejo con algunos tutoriales sobre cómo hacerlo en diferentes proveedores de hosting:

WP Control y la gestión de tareas programadas desde el escritorio de WordPress

Por defecto, WordPress no ofrece ningún mecanismo para gestionar las tareas que hay programadas en tu instalación. Pero a veces un desarrollador o incluso un usuario de WordPress querrá poder comprobar qué tareas hay programadas, cuándo van a ejecutarse o incluso forzar su ejecución de forma manual en un momento determinado… ¿Qué podemos hacer en estos casos?

Pues, como siempre, la solución la tenemos en el ecosistema de plugins de WordPress . En concreto, para la gestión de tareas programadas de WordPress te recomiendo el plugin WP Control. Este plugin permite:

  • Ver todas las tareas programadas junto a los parámetros que usan, su periodicidad, la función asociada que se ejecutará cuando llegue el momento y cuándo está programada su próxima ejecución.
  • Editar, eliminar o ejecutar inmediatamente cualquier tarea programada.
  • Programar nuevas tareas.
  • Borrar tareas en lote.
Captura de pantalla de WP Control
Captura de pantalla de WP Control.

Como puedes ver, las tareas programadas de WordPress son muy útiles, aunque debemos ser cuidadosos y asegurarnos de que no van a ralentizar nuestra web. Por suerte, los proveedores de hosting nos ofrecen mecanismos para optimizar la ejecución de WP-Cron y, además, tenemos también a nuestra disposición diferentes plugins que nos permiten hacer un seguimiento exhaustivo de qué tareas hay programadas y controlar cuándo y cómo deben ejecutarse.

Imagen destacada de JESHOOTS.COM en Unsplash.

6 respuestas a «WP-Cron. Cómo gestionar las tareas programadas en WordPress»

  1. Avatar de Raúl
    Raúl

    El plugin se llama WP-Crontrol (festival del marketing). Muy bien artículo, como siempre 🙂

    1. Avatar de Antonio Villegas

      Gracias por el comentario, Raúl. ¡Un abrazo!

  2. Avatar de jesus
    jesus

    hola excelente información, saludos desde Puebla México, mi pregunta es si es posible ejecutar un proceso que realiza un plugin como un tarea cron, tengo un plugin de search engine, el cual debo ejecutar manualmente para actualizar un caché de busqueda, es posible hacer esta tarea de forma automatica, decirle a WordPress que ejecute la funcion de este plugin cada cierto tiempo…de antemano muchas gracias

    1. Avatar de David Aguilera

      Sí, claro. De hecho, ese es precisamente el objetivo de una tarea cron: ejecutar tareas de forma automática. En tu caso, deberías ver qué función PHP se ejecuta cuando le das al botón (o lo que sea) de tu plugin y programar una tarea cron para que ejecute dicha función con la periodicidad que te interesa.

      De todas formas, huelga decir que también es posible que el proceso que realiza tu plugin no sea una única función PHP y que involucre diferentes tareas, algunas de las cuales no se realizan en tu servidor WordPress sino que se hacen en tu navegador… en ese caso, no creo que fuera posible o, como mínimo, trivial automatizarlo.

      En definitiva, depende un poco de qué proceso exactamente quieras automatizar y, en concreto, de cómo esté implementado internamente. Mi recomendación: pregúntale al desarrollador del plugin 😉

  3. Avatar de Angélica Ocampo
    Angélica Ocampo

    Hola, requiero hacer una actualización de clientes y productos a través de planos con tres cortes diarios. Esta podría ser la solución?

    1. Avatar de Antonio Villegas

      Hola Angélica. El cron te permite programar tareas periódicas. Si programas el código de las actualizaciones que necesites, puedes hacer uso del cron para lanzar esas tareas con la periodicidad que desees.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad de Nelio Software

Tus datos personales se almacenarán en SiteGround y serán usados por Nelio Software con el único objetivo de publicar tu comentario aquí. Con el envío de este comentario, nos das el consentimiento expreso para ello. Escríbenos para acceder, rectificar, limitar o eliminar tus datos personales.