Es recomendable trasladar WP-CRON al cron de Linux para optimizar el rendimiento: se desactiva en wp-config.php y se genera la tarea a nivel de servidor. Jamás debe suprimirse por completo, ya que WordPress lo emplea para actualizaciones, correos o entradas programadas. Plugins como WP-Crontrol permiten identificar fallos y depurar crons huérfanos.
Una de las cosas que nos simplifica las labores en nuestro día a día es la posibilidad de poder automatizar y programar las mismas, puesto que nos permite dejar ciertas cosas preparadas para que se lleven a cabo en un momento concreto, sin necesidad de estar atentos, brindándonos mayor flexibilidad.
Un ejemplo de esto son las múltiples tareas que podemos llevar a cabo en nuestras páginas web, no solo si utilizamos la web como un ecommerce, sino 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
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 generar la tarea cron desde la sección ‘Tareas’ del panel de control, autenticándonos con el usuario que corresponda.
En este punto tendríamos que definir nuestra tarea cron en ‘Comando’ (cambiando 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 escoger la periodicidad, para lo cual podemos apoyarnos en el generador que se muestra a la derecha.
En la imagen siguiente se aprecia un ejemplo de cómo quedaría el cron configurado para ejecutarse a diario a las 06:00.

Verificar el funcionamiento de las tareas cron
Después de haber configurado la tarea cron a nivel de servidor, podemos comprobar que funciona correctamente volviendo a entrar en el panel del plugin WP Control, donde deberíamos poder ver las tareas cron sin ningún aviso, como se muestra en la imagen siguiente:

Algo que conviene tener presente para el futuro es que esta configuración, al necesitar cambios en el panel de control del servidor, tendría que rehacerse y comprobarse de nuevo su funcionamiento si en algún momento trasladamos la web a un nuevo servidor, puesto que la parte del wp-config.php sí se mantendría, pero al migrar la web no se genera automáticamente el cron a nivel de servidor.
Borrar WP Crons huérfanos
Otra alternativa que puede resultarnos útil es suprimir WP Crons residuales.
Las tareas cron de nuestra web, igual que la mayor parte de la información que se guarda de una instalación de WordPress, se almacenan en la tabla «wp_options», y aunque la mayoría de plugins y temas están preparados para borrar también las tareas cron y otra información cuando se eliminan, otros no lo hacen y podemos encontrar tareas cron que pertenecen a plugins que dejamos de usar hace 2 años, por ejemplo.
Esto resulta interesante hacerlo sobre todo si nuestra web se desarrolló hace tiempo, ha sufrido múltiples modificaciones (instalación y borrado de plugins, cambios de tema, etc.) o si estamos teniendo un problema de recursos acentuado por la ejecución de wp-cron.php.
Una de las alternativas para limpiar las tareas cron es el plugin ‘Advanced Database Cleaner’:

En la versión de pago, nos permite ver a qué elemento corresponde cada tarea cron. Si disponemos de la opción gratuita, es un proceso más delicado y deberíamos asegurarnos de a qué elemento pertenece la tarea y comprobar la web después de aplicar cambios.
Preguntas Frecuentes
¿Qué gano exactamente al desactivar WP-Cron y usar el cron de Linux?
Eliminas la comprobación que WordPress hace en cada carga de página para ver si hay tareas pendientes. Eso reduce peticiones y algo de carga en visitas con tráfico alto. El cron del sistema ejecuta con puntualidad y sin depender del tráfico, algo útil en sitios con pocas visitas o con tareas que deben correr a una hora fija. La mejora se nota sobre todo en la latencia percibida por el usuario.
¿Qué intervalo pongo en el cron de Linux para wp-cron.php?
Cada 5 o 10 minutos cubre la mayoría de casos. Bajarlo a 1 minuto rara vez aporta y multiplica las ejecuciones. Si tienes tareas pesadas, como envíos masivos o importaciones, valora 15 minutos y revisa que no se solapen. Evita intervalos muy cortos en servidores compartidos, donde el cron puede acumular procesos si una ejecución tarda más de lo previsto.