wp-cron.php de WordPress

Dificultad del post: facilmediadificil
[Total:3    Promedio:4.3/5]
wp-cron.php wordpress

Pues no, este no es otro post sobre el wp-cron.php de WordPress que empieza explicando cómo desactivar el wp-cron.php de WordPress para ejecutar las tareas programadas con el CRON de Linux.

Existen MUY poca documentación sobre cómo funciona el wp-cron.php de WordPress, para qué podemos utilizarlo y la razón por la que causa tantos problemas que en la mayoría de blogs recomiendan desactivarlo.

wp cron wordpress

Antes de nada, quiero explicar un poco de qué va el tema, ya que el wp-cron.php de WordPress es una parte bastante importante del CMS. Todo el mundo sabe que está ahí y que consume recursos, pero nadie sabe utilizar el wp-cron.php ni cómo funciona.

En este artículo, voy a intentar tratar TODOS los temas relacionados con el wp-cron.php de WordPress que se te puedan pasar por la cabeza y que aún no he visto ningún blog que no hable de lo mismo cuando se habla del wp-cron.php, es decir, de desactivarlo.

 

¿Qué es el wp-cron.php y cómo funciona?

El wp-cron.php, como su nombre indica, es un archivo. Lo podemos encontrar en todas las instalaciones WordPress, al igual que el wp-config.php, del que ya hemos hablado anteriormente en este blog.

El wp-cron.php es el archivo que hace funcionar el WP-CRON, el equivalente al CRON de Linux dentro de WordPress. Permite ejecutar tareas programadas cada cierto tiempo de forma completamente automatizada.

En el wp-cron.php, los plugins y los themes cargan tareas programadas para ejecutar procesos, al igual que el núcleo de WordPress, ya que tareas simples como la publicación de post programados o la revisión de actualizaciones se realiza de forma automática con el wp-cron.php de WordPress.

wp cron wordpress

Para hacer esto, el archivo wp-cron.php se ejecuta cada cierto tiempo y comprueba si tiene que ejecutar las tareas. Ahí es donde nos encontramos el problema.

En circunstancias normales, el wp-cron.php debería ejecutarse 1 vez cada minuto, pero el sistema no es perfecto y en lugar de eso WordPress utiliza un sistema bastante ABSURDO para ejecutar el wp-cron.php en periodos cortos de tiempo: cada visita que entra a la web, siempre y cuando no se cachee, ejecuta el wp-cron.php que, a su vez, comprueba si le toca ejecutar alguna tarea.

Eficiente, ¿eh? Pues no, la verdad es que no. Es un consumo de recursos innecesario y un sistema absurdo. Por esta razón, la gente desactiva el wp-cron.php y utiliza el CRON de Linux para hacer exactamente lo mismo.

wp cron wordpress

¿Pero a que así explicado tiene lógica? Al desactivar el wp-cron.php siguiendo los manuales que podemos ver por ahí, lo que hacemos simplemente es desactivar la ejecución del wp-config.php en cada visita, para posteriormente ejecutar el archivo wp-cron.php cada minuto o cada cinco minutos con el CRON de Linux.

Te lo resumo. La gente desactiva el wp-cron.php a favor del CRON de Linux porque consume recursos, pero desconocen el motivo: el wp-cron.php de forma normal NO se ejecuta cada minuto, sino que se ejecuta con las visitas.

Si tienes un sitio web WordPress con miles de visitas concurrentes o un sitio muy dinámico (que no se puede cachear mucho) como una tienda online, le estás metiendo una paliza al wp-cron.php ejecutándolo una y otra vez. Lo que provocas es la sobrecarga de PHP y un excesivo consumo de recursos. No provoca ralentizaciones directamente porque el wp-cron.php se ejecuta en background, aunque puede causar ralentizaciones indirectas si nos quedamos sin recursos para cargar la web.

Y este es un ejemplo claro visualizado desde la consola de peticiones realizadas cada segundo al wp-cron.php de una instalación de WordPress debido a que se está ejecutando con cada vista:

wp cron wordpress

Incluso te lo voy a explicar de una forma más directa con un ejemplo: si tienes 1000 visitas por minuto y todas entran sin cache, estás ejecutando el wp-cron.php de WordPress 1000 veces por minuto, pese a que solo te hace falta ejecutarlo 1 vez por minuto.

En sitios web con muy poco tráfico ocurre justo lo contrario. A veces no se ejecutan las tareas CRON porque tienen que ejecutarse con las visitas… pero no las hay.

¿Ahora entiendes cómo funciona el wp-cron.php y la razón por la que recomiendan desactivarlo a favor del CRON de Linux?

Al final, tenemos dos factores que hacen que el wp-cron.php consuma tantos recursos y que ralentice la carga de todo el sitio web (sobretodo de las zonas no cacheadas, como el panel de control):

  • Cada vez se instalan más plugins que añaden más tareas al wp-cron.php y eso hace que la comprobación de tareas que hay que ejecutar sea más pesada y consuma más recursos durante más tiempo.
  • Cuantas más visitas sin cachear tenga tu sitio web, más veces ejecutara el wp-cron.php y más veces se realizarán las consultas para ver qué tareas hay que ejecutar en cada momento.

¿Qué se provoca con esto? Pues una bola de nieve que va creciendo y consumiendo más y más recursos mediante la ejecución de PHP.
Al final, la desactivación del wp-cron.php de WordPress se convierte en una técnica WPO aplicable a cualquier instalación de WordPress y que hace más efecto en casos de webs muy dinámicas como tiendas online WooCommerce o áreas privadas creadas con MemberPress o S2Members.

 

Revisar el WP-CRON de WordPress

Sin utilizar un plugin es un lío comprobar qué tareas están “declaradas” en el CRON de WordPress y cada cuánto se ejecutan, pero existe un plugin gratuito llamado Advanced Cron Manager que nos sirve.

wp cron wordpress

Y justo después de instalar y activar el plugin, en la sección “Herramientas” del panel de control de WordPress nos aparecerá una nueva sección llamada “Gestor del cron”. Abrirá esta ventana:

wp cron wordpress

Creo que, al ver la imagen anterior, es fácil entender el wp-cron.php de WordPress.

Para que te sirva de ejemplo, en el pantallazo anterior puedes ver el nombre del evento (normalmente, todos ejecutados por plugins o por el propio núcleo de WordPress). También cada cuánto se ejecuta el evento y cuándo será la siguiente ejecución.

Podemos modificar las tareas programadas existentes en el WP-CRON. También podemos eliminarlas o crear nuevas tareas.
Además, desde el plugin podemos recibir instrucciones para desactivar la ejecución del wp-cron.php por visitas y activarlo mediante el CRON de Linux:

wp cron wordpress

Me encanta el plugin Advanced Cron Manager. Puedo revisar qué es lo que se está ejecutando periódicamente en mi WordPress y desactivar alguna tarea si yo creo que está abusando con sus ejecuciones.

Como nota final, quiero que revises la captura de tareas que hay en el WP-CRON de la instalación de WordPress de esta misma web:

wp-cron wordpress

Y la compares con esta otra del WP-CRON de una instalación WordPress vacía recién instalada en un hosting.

wp-cron wordpress

¿A que hay diferencia? Pues la diferencia son las tareas ejecutadas por los plugins y el theme activo, que son la gran mayoría.

Si quieres ver cómo utilizar el plugin Advanced Cron Manager en tu WordPress para gestionar las tareas CRON y tenerlas controladas, puedes ver el siguiente vídeo que he grabado para ti:

Puedes encontrar más información sobre el plugin Advanced Cron Manager en el repositorio oficial de plugins de WordPress: https://es.wordpress.org/plugins/advanced-cron-manager/

Si quieres una alternativa sólida a Advanced Cron Manager, también puedes probar el plugin WP Control, que es gratuito y es bastante utilizado: https://es.wordpress.org/plugins/wp-crontrol/

 

WP-CRON no funciona: no se ejecutan las tareas

En algunas ocasiones podemos encontrar casos donde, por alguna razón, no se ejecutan las tareas programadas del WP-CRON de WordPress.

¿Cómo se detectan estos errores? Normalmente, la gente se da cuenta por el típico error “Programación perdida” que aparece cuando tienes programado el publicar un artículo y este no se publica, mostrando ese error.

wp cron wordpress

Como he dicho anteriormente, en la mayoría de los casos, cuando vemos un error de programación perdida es porque el wp-cron.php de WordPress no se ha ejecutado.

Normalmente, el wp-cron.php no se ha ejecutado porque ninguna visita lo ha activado.

Simple, ¿no? Sí, es simple, pero por esta razón es necesario conocer el funcionamiento exacto del wp-cron.php de WordPress.

Normalmente, cuando se explica cómo solucionar el error “Programación perdida” o “Missed sheduled” en WordPress, se explica directamente cómo desactivar wp-cron.php y activar el CRON de Linux, sin explicar la razón exacta de este problema.

 

Desactivar el wp-cron.php y activar el CRON de Linux

Quiero decir antes de empezar que este es un proceso OFICIAL, es decir, es un proceso / configuración que podemos encontrar en la documentación oficial en el CODEX de WordPress. No es ninguna “ñapa”.

También quiero decir que esta configuración que se basa en desactivar la ejecución del wp-cron.php por petición HTTP y activar la ejecución directamente desde el intérprete PHP o mediante petición programada. Es la única forma de “solucionar” el “problema” del wp-cron.php de WordPress y deshacernos del método de ejecución tan absurdo que trae de forma nativa.

Te voy a enseñar cómo hacer este proceso paso a paso y sin complicarte la vida, válido para cualquier hosting o servidor.

 

1 – Cómo desactivar el wp-cron.php de WordPress

Como dije antes, el proceso para desactivar el wp-cron.php es oficial y WordPress ofrece documentación para hacerlo.

Debemos ir al archivo wp-config.php de nuestro WordPress y añadir esta línea:

Justo después de esta línea:

Si quieres ver el proceso de una forma más animada, puedes ver la edición del wp-config.php de WordPress con un cliente FTP como Filezilla en el siguiente vídeo:

Y si quieres ver cómo editar el wp-config.php de WordPress utilizando el File Manager o Administrador de Archivos de cPanel, puedes ver este otro vídeo:

Después de hacer esto, el archivo wp-cron.php ya no se seguirá ejecutando por HTTP (o HTTPs) con cada petición, pero estaremos sin WP-CRON y debemos hacer algo más para tener tareas programadas en WordPress otra vez.

Yo personalmente te recomiendo NO quedarte sin tareas programadas, ya que procesos importantes como las actualizaciones, las copias de seguridad programadas o la contabilización de estadísticas (en casos donde se necesite) se hacen utilizando el wp-cron.php, por lo que debe ejecutarse SÍ o SÍ.

 

2 – CRON de Linux en WordPress

Tras el paso anterior, tenemos que configurar algo que ejecute el wp-cron.php de WordPress directamente en el intérprete PHP, sin ser mediante una petición HTTP o HTTPs o, al menos, mediante una petición programada, no circunstancial.

Si configuramos una tarea programada en el CRON de Linux de nuestro servidor, podemos hacer esto.

Podemos configurar la tarea CRON de dos formas, ejecutando el archivo wp-config.php desde rutas internas o desde el dominio externo. Mi recomendación es ejecutarlo desde rutas internas porque nos ahorramos la conexión por HTTP, pero si es muy difícil para ti o no puedes consultar con tu proveedor de hosting para que te ayude, puedes hacerlo desde el dominio (rutas externas).

Mediante rutas internas, debes ejecutar algo similar a esto, aunque adaptado a las rutas del servidor donde se aloja tu web (tanto la ruta al intérprete PHP como la ruta al archivo wp-cron.php). El siguiente ejemplo es para la mayoría de servidores cPanel:

Mientras que si haces la petición desde rutas externas para que se ejecute en CRON, debes hacerlo con el comando WGET y quedaría algo similar a esto:

Debes tener cuidado, ya que si tienes un proxy inverso puede llegar a no funcionar, como por ejemplo CloudFlare.

Por si no te ha quedado claro, en servidores cPanel como los que tenemos en el hosting compartido de Raiola Networks, puedes ver el siguiente vídeo donde te digo cómo hacer el proceso de configurar el CRON de Linux en WordPress:

Y la recomendación general es ejecutar una de estas tareas (debes elegir uno de los dos métodos) cada 5 o 15 minutos. Aunque si queremos podemos configurarlo para que se ejecute cada minuto, creo que se desperdician bastantes recursos y no es necesario. Con ponerlo cada 5 o 15 es suficiente.

Icono suscripción Newsletter

¿Quieres
recibir mis articulos?

No te pierdas todos mis trucos para WordPress y WPO.

Share on twitter
Twitter
Share on facebook
Facebook
Share on linkedin
LinkedIn
Álvaro Fontela
Álvaro Fontela
Soy ponente en eventos de marketing digital, consultor WordPress y co-fundador de Raiola Networks, amante del mundo del motor (coches japoneses) y tecnófilo empedernido.
¿Quieres recibir mi contenido semanal?
¡Te enviare todas las semanas mi contenido!
Cabecera del formulario de suscripción
  • RESPONSABLE:

    RAIOLA NETWORKS, S.L.

    C.I.F.: B27453489

    Avda de Magoi, 66, Semisótano, Dcha., 27002 Lugo (Lugo)

    Telefono: +34 982776081

    e-mail: info@raiolanetworks.es

    FINALIDAD:Atender solicitudes de información, ejecución de la contratación de servicios y remisión de comunicaciones comerciales.
    LEGITIMACIÓN:Consentimiento del interesado y contratación de productos y/o servicios del Responsable
    DESTINATARIOS:

    No se ceden datos a terceros, salvo obligación legal.

    Personas físicas o jurídicas directamente relacionadas con el Responsable

    Encargados de Tratamiento adheridos al Privacy Shield

    DERECHOS:Acceder, rectificar y suprimir los datos, portabilidad de los datos, limitación u oposición a su tratamiento, derecho a no ser objeto de decisiones automatizadas, así como a obtener información clara y transparente sobre el tratamiento de sus datos.
    INFORMACIÓN ADICIONAL:Se puede consultar la política de privacidad de forma más detallada aquí.