Cómo desactivar WP-CRON y usar el CRON de Linux para mejorar el rendimiento de WordPress
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.
- 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.
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:
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:
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
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.
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:
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’:
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.
Deja una respuesta
Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *