Cómo desactivar WP-CRON y usar el CRON de Linux para mejorar el rendimiento de WordPress

Fecha: 21/08/2024
Una de las cosas que nos facilita las tareas en nuestra vida diaria es la posibilidad de poder automatizar y programar las mismas, ya que nos permite dejar ciertas cosas preparadas para que se realicen en un momento específico, sin necesidad de estar pendientes, dándonos mayor flexibilidad.

Un ejemplo de esto son las múltiples tareas que podemos realizar en nuestras páginas web, no solamente si utilizamos la web como un ecommerce, si no también en una web común, ya que podemos hacerlo con tareas más pesadas como puede ser una exportación de productos desde varios proveedores, y también con tareas más sencillas como programar una entrada (sí, hoy en día podríamos publicar la entrada desde la tablet o el móvil en la playa, pero, mejor poder programarla y así no necesitamos estar pendientes, ¿no crees?).
Cron nos permite programar la ejecución de comandos en el sistema operativo, en un momento específico, de forma repetida en el tiempo o puntual.

En este artículo vamos a ver cómo funciona WPCron, cómo diagnosticar problemas con su funcionamiento, configurarlo a nivel de servidor para utilizar el cron de Linux en su lugar y limpiar crons residuales.

Índice del artículo
  • WPCron: qué es y cómo funciona
  • Diagnosticar problemas en el funcionamiento de WP Cron
  • Configurar el cron a nivel servidor en cPanel
  • Configurar el cron a nivel servidor en RaiolaCP
  • Comprobar funcionamiento tareas cron
  • Eliminar WP Crons huérfanos

WPCron: qué es y cómo funciona


WPCron es el cron de WordPress, se ejecuta a través de uno de los ficheros del núcleo: "wp-cron.php" y posiblemente te preguntes: vale, pero, ¿cómo se ejecuta ese fichero?, la respuesta es: con las visitas de la web.

Cada vez que un usuario accede a nuestra web, esta lanza múltiples peticiones y entre esos procesos, estaría la ejecución del wp-cron.php, que comprueba las tareas cron. Este es el mayor problema de su funcionamiento, principalmente a nivel de rendimiento, ya que no es óptimo que se realicen estas comprobaciones con cada una de las visitas que la web recibe, en una web con poco tráfico y configuración ligera, podría no ocasionar problemas y funcionar correctamente, pero debemos tener en cuenta otros aspectos que pueden acarrear problemas para nuestra web y aumentar el consumo de recursos que realiza la misma, por ejemplo:

  • Una web sobrecargada de plugins, ya que cada plugin puede añadir tareas cron propias a mayores de las del núcleo de WordPress, al igual que sucede con los temas.

  • Una recurrencia de las tareas cron demasiado frecuente para tareas pesadas, como puede ser el cron de una copia de seguridad, especialmente si el tamaño que ocupa la web es elevado y tiene una cantidad de ficheros considerable, ya que es posible que no consiga acabar correctamente antes de iniciarse la siguiente ejecución, de forma que se solapen los procesos entre sí, sobrecargando los recursos.

  • Procesos de exportación e importación de contenido, si tienen que actualizar grandes cantidades de información.


Otro inconveniente de la configuración por defecto es que la ejecución de nuestros cron depende de los accesos a la página, por lo que si programamos que una entrada se publique a las 06:00 de la mañana y nadie accede a la web hasta 2 horas después, no se publicaría hasta ese momento.

Diagnosticar problemas en el funcionamiento de WP Cron


Con lo que comentamos en el párrafo anterior, es posible que, presas del pánico de que esto afecte a nuestra web, pensemos que es una buena idea deshabilitar el cron de WordPress totalmente, sin embargo, no, no lo es.

WPCron se utiliza para realizar múltiples tareas en la web: comprobación de actualizaciones, actualizaciones automáticas, envíos de reportes por correo electrónico de varios plugins, petición y recuperación de imágenes optimizadas si utilizamos plugins para ello, etc. y debería funcionar correctamente en nuestra instalación.

Uno de los síntomas por los que podemos darnos cuenta de que las tareas cron en nuestro sitio no se están ejecutando como deberían es la aparición del famoso mensaje: "programación perdida", después de pasar el momento en el que nuestra entrada programada debería estar publicada.

Impacto negativo de WP-CRON en el rendimiento de WordPress

En el caso de que no programemos entradas, una herramienta que puede ayudarnos en esto es el plugin WP-Crontrol, que una vez instalado nos permitirá visualizar los eventos cron que existen en nuestro sitio web y su información asociada, en la siguiente imagen podemos ver un ejemplo de cómo visualizaríamos este apartado si WPCron no está funcionando como se espera en nuestra web:

wpcron WP-Crontrol

En este mismo apartado nos permitirá ejecutar manualmente las diferentes tareas cron de nuestra instalación, y nos podría dar también más información, ya que esta configuración de la cual nos avisa: ‘La constante DISABLE_WP_CRON está configurada a true. La llamada de WP-Cron está desactivada.’ podría ser la causa del problema si únicamente hemos deshabilitado WP-Cron, pero no hemos configurado que se ejecute en Linux (lo cual veremos más adelante en este artículo cómo podemos realizarlo).

Además, podríamos crear también tareas cron y recurrencias, en caso de que necesitemos ejecutar tareas personalizadas o hacerlo con una frecuencia no esté contemplada en la configuración por defecto.

Configurar el cron a nivel servidor en cPanel


Teniendo en cuenta lo que hemos visto en los apartados anteriores, lo óptimo sería configurar la ejecución de las tareas cron a nivel servidor, pasando a usar el cron de Linux, por un lado, para mejorar el rendimiento de la web a nivel consumos especialmente y por otro, para no depender de si se accede a la página o no para su ejecución.

Si tenemos un servidor contratado cuyo panel de control es cPanel, lo primero que tendremos que hacer es deshabilitar el cron de WordPress, para ello tendríamos que editar el wp-config.php (podemos hacerlo a través de FTP o del administrador de archivos de cPanel) y añadir la siguiente línea:
define('DISABLE_WP_CRON', true);

Luego, simplemente tendríamos que crear la tarea cron en nuestra cuenta de cPanel, en el siguiente apartado:

Configurar el cron a nivel servidor en cPanel

La tarea cron a configurar sería la siguiente:
wget -q -O /dev/null -t 1 "https://tusitioweb.es/wp-cron.php?doing_wp_cron" >/dev/null 2>&1

 

email cron cpanel
Es importante sustituir ‘https://tusitioweb.es/’ por el dominio de nuestra web. Tendríamos que usar el dominio final, con http o https y con www o sin ellas, en base a cómo cargue la web en el navegador finalmente.

La frecuencia con la que se ejecutan las tareas cron podría modificarse en cualquier momento, lo aconsejable es configurarlo cada 5 o cada 15 minutos, no obstante, si estamos experimentando problemas de consumos, podríamos ajustarlo un poco más y utilizar el intervalo más bajo de las programaciones disponibles, es decir, si tenemos tareas cron que se ejecutan cada día, otras de forma semanal y otras cada hora; seleccionaríamos que se ejecute cada hora.

Configurar el cron a nivel servidor en RaiolaCP


Si tenemos contratado un servidor con RaiolaCP, como puede ser un VPS SSD Optimizado o un servidor dedicado con este panel, el primer paso sería el mismo, añadir en el wp-config.php la línea:
define('DISABLE_WP_CRON', true);

 

Y crear la tarea cron desde el apartado ‘Tareas’ del panel de control, identificándonos con el usuario correspondiente.

Aquí tendríamos que configurar nuestra tarea cron en ‘Comando’ (modificando también el dominio por el nuestro):
wget -q -O /dev/null -t 1 "https://tusitioweb.es/wp-cron.php?doing_wp_cron" >/dev/null 2>&1

y seleccionar la frecuencia, para lo que podemos ayudarnos del generador que aparece en la parte derecha.

En la siguiente imagen podemos ver un ejemplo de cómo quedaría el cron configurado para ejecutarse todos los días a las 06:00.

cron configurado para ejecutarse

Comprobar funcionamiento tareas cron


Una vez que hayamos configurado la tarea cron a nivel servidor, podemos verificar que está funcionando correctamente accediendo de nuevo al panel del plugin WP Control, donde deberíamos poder visualizar las tareas cron sin ninguna advertencia, tal como figura en la siguiente imagen:

Comprobar funcionamiento tareas cron
Algo a tener en cuenta de cara al futuro es que esta configuración, al requerir modificaciones en el panel de control del servidor, habría que reconfigurarla y verificar el funcionamiento de nuevo si en algún momento migramos la web a un nuevo servidor, ya que la parte del wp-config.php sí se conservaría pero con migrar la web no se crea automáticamente el cron a nivel servidor.

Eliminar WP Crons huérfanos


Otra opción que puede interesarnos es eliminar WP Crons residuales.

Las tareas cron de nuestra web, al igual que la mayor parte de información que se almacena de una instalación de WordPress, lo hace en la tabla «wp_options», y aunque la mayoría de plugins y temas están preparados para eliminar también las tareas cron y otra información si se eliminan, otros no lo hacen y podemos encontrarnos con tareas cron que pertenecen a plugins que hemos dejado de usar hace 2 años, por ejemplo.

Esto es interesante realizarlo especialmente si nuestra web se desarrolló hace un tiempo, ha sufrido modificaciones múltiples (instalación y borrado de plugins, cambios de tema, etc.) o bien si estamos experimentando un problema de recursos acentuado por la ejecución de wp-cron.php.

Una de las opciones para limpiar las tareas cron es el plugin ‘Advanced Database Cleaner’:

limpiar las tareas cron el plugin Advanced Database Cleaner

En la versión de pago, nos permite ver a qué elemento pertenece cada tarea cron. En caso de que tengamos la opción gratuita, es un proceso más delicado y deberíamos cerciorarnos a qué elemento pertenece la tarea y verificar la web después de hacer cambios.
Antes de realizar tareas como esta, que implican borrado de información, es aconsejable realizar una copia de seguridad de la web. Échale un vistazo a este otro artículo para ver cómo realizarlas.
Mila Fernandez
Mila Fernandez

Formo parte del departamento de WordPress, apasionada de la lectura, tengo la habilidad de saberme diálogos de Harry Potter de memoria.

Artículos relacionados

Si te ha gustado este post, aquí tienes otros que pueden ser de tu interés. ¡No dejes de aprender!

Tenemos 15 comentarios en Cómo desactivar WP-CRON y usar el CRON de Linux para mejorar el rendimiento de WordPress

Deja una respuesta

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

Avatar del autor del comentario

David García-Pascual Albares

22/01/2016 a las 13:19

Hola Álvaro, se han de incluir las "www" en la línea de código de Tareas Cron? Gracias !!

Responder
Avatar del autor del comentario

Alvaro Fontela

22/01/2016 a las 13:40

Hola David, depende de si tu web usa las WWW o no, es decir, la URL debe ir exactamente como tienes tu la URL de la web.

Un saludo.

Responder
Avatar del autor del comentario

David García-Pascual Albares

22/01/2016 a las 14:31

Perfecto. en webmaster tools tengo seleccionada con WWW. y el dominio esta configurado con www también. La empresa tiene el alojamiento con vosotros. Por cierto, gracias por la rapidez y ayuda que me vais prestando !!! Un abrazo y buen fin de semana.

Responder
Avatar del autor del comentario

Alvaro Fontela

22/01/2016 a las 19:23

Nada, gracias a ti David.

Un saludo.

Responder
Avatar del autor del comentario

Lobo

03/06/2016 a las 12:09

Hola Alvaro,

Gran artículo, no tenía ni idea de la existencia del WP-CRON. Eres un experto en estos temas aunque de vez en cuando quizá deberías dejar el ordenador un rato y ponerte a correr un poco que te sobran un par de kilos.

Saludos,

Responder
Avatar del autor del comentario

Alvaro Fontela

03/06/2016 a las 22:41

Hola Lobo, gracias por tus consejos y gracias por interesarte por mi salud.

Cuando eres un profesional del mundo digital con "genética" de coger kilos, normalmente los subes y los bajas dependiendo de las temporadas de trabajo, para mi es mucho mas rentable trabajar a fondo 6 meses y coger kilos, sabiendo que en temporadas mas relajadas puedo disponer de todo el tiempo que quiera para bajarlos sin preocuparme tanto por mi vida profesional.
Realmente es una putada, porque al hacer deporte se pierden muy rápido, pero no siempre hay tiempo para eso si quieres mantener el nivel profesional, todo depende de que priorices en la vida, aunque hay gente que por mucho que deje de hacer deporte no engorda, yo desgraciadamente no tengo esa suerte,

Un saludo.

Responder
Avatar del autor del comentario

Lobo

06/06/2016 a las 10:13

Te entiendo perfectamente Álvaro, siempre hay que dar prioridad a la vida profesional. Como tú dices, cuando tengas menos trabajo siempre sería bueno para la salud el hecho de hacer un mínimo de ejercicio.

Suerte, y un gran saludo.

Responder
Avatar del autor del comentario

Antonio Manco

08/04/2018 a las 07:21

Hola Álvaro, un saludo. Mi sitio está en https:// y recibí errores al intentar este cambio. Un saludo y gracias de antemano

Responder
Avatar del autor del comentario

Héctor Luaces

16/04/2018 a las 11:59

Hola, Antonio:

Si nos indicas que errores recibías podemos mirarlo.

Ten en cuenta que si usas https:// tendrás que adecuar la URL del cron en consecuencia (https://

Responder
Avatar del autor del comentario

Jonell

27/10/2019 a las 20:39

Hola Alvaro, si no tengo cpanel es un vps con ubuntu

Responder
Avatar del autor del comentario

Héctor Luaces

13/11/2019 a las 10:31

Hola, Jonell:

entonces tendrías que editar el cron de tu usuario de Ubuntu.

Para ello puedes usar el comando de terminal:

crontab -e -u

Cambia por el nombre que use tu usuario del servidor.

Al hacer eso se abrirá el editor de crontab donde podrás añadir la tarea que quieras. Una vez guardes, esta estará disponible.

Alternativamente, puedes añadir tus tareas como archivos en el directorio /etc/cron.d/, para cuyo caso te recomiendo que mires alguno de los que ya hay creados en esa localización y lo tomes como ejemplo para tu propio script.

¡Un saludo!

Responder
Avatar del autor del comentario

Tamara

06/05/2020 a las 13:31
Gracias
Responder
Avatar del autor del comentario

Alvaro Fontela

06/05/2020 a las 17:47
Gracias a ti Tamara :)
Responder
Avatar del autor del comentario

Taisa

03/04/2023 a las 11:38
Bueno, hecho para las webs más pesadas y a ver si con esto no se me comen tanto la web los recursos del hosting. Llevaba una temporada que estaba todo bien pero ahora no sé qué habrá pasado que anda saturándose.

Y me pregunto... Si esto es mejor para el rendimiento ¿Porqué no lo configurais así por defecto, alguna razón?
Responder
Avatar del autor del comentario

Alvaro Fontela

11/04/2023 a las 00:34
Hola Taisa, esto no viene por defecto así porque dificultaría la configuración para usuarios sin conocimientos y seria una barrera de entrada importante para empezar con WordPress.

Y nosotros como proveedor no lo hacemos porque se podrían generar ciertos problemas con plugins, como por ejemplo con Mailster no tendríamos una razón de peso para explicárselo al cliente sin que se enfade, por eso ningún proveedor lo hace.
Responder

Deja una respuesta

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