944 063 154

Las tareas programadas en WordPress: WP-CRON

Publicado enDesarrollo y Programación en agosto 25, 2021 10:00 am

A veces encontramos WordPress que consumen demasiados recursos porque ejecutan varias tareas a la vez. Esto puede deberse a que, al desinstalar un plugin, algunas tareas que puedan estar incluidas en el WP-CRON no se hayan deshabilitado correctamente.

¿Qué es WP-CRON?

Un cron es un gestor de procesos que se ejecutan en una web de forma regular. En este caso es el encargado de, en una instalación WordPress, llamar a los diferentes procesos, de forma que el propio WordPress pueda ejecutar tareas sin la intervención del usuario. WP-CRON se ocupa de que se realicen copias de seguridad programadas o de que algunos elementos de la instalación se actualizasen automáticamente. También el hecho de que tus entradas programadas estén disponibles para tus usuarios cuando tú decidas. Pero, aunque parezca que WP-CRON solo aporta ventajas a una instalación WordPress, lo cierto es que también tiene unas cuantas desventajas.

Por ejemplo, a mayor carga en el WP-CRON, más lenta irá la web, ya que el servidor tendrá un mayor número de tareas cron que procesar. Incluso podría llegar a saturar la web y que los usuarios solo puedan obtener errores, en lugar del contenido que estaban buscando. Se trata de un problema tan habitual que aproximadamente un 70% de los excesos de consumo de recursos se deben al WP-CRON. Algo que en la mayoría de los casos se soluciona sustituyéndolo por otro sistema que cumpla con las mismas funciones, pero que consuma menos recursos. En caso de optar por desactivar el WP-CRON deberemos tener en cuenta que muchas tareas que se hacían automáticamente serán ahora un proceso manual.

¿Por qué conviene desactivarlo?

A pesar de que WP-CRON es un elemento muy necesario y útil de WordPress, en ocasiones es mejor prescindir de él. WP-CRON se ejecuta cada vez que se carga una URL y, aunque WordPress limita a una ejecución por minuto, sigue siendo un tiempo de ejecución excesivo.

Hay que tener en cuenta que, para que se ejecute, es necesario que se haya recibido una petición. Es decir, por mucho que haya una serie de tareas programadas para ejecutarse en un momento determinado, algo debe activarlas: una solicitud a la web, que habitualmente suele ser una visita de un usuario. Al producirse esta solicitud, WordPress hará dos cosas: devolver el contenido que se ha solicitado y ejecutar WP-CRON. Es por eso que a veces, a pesar de que haya tareas programadas, no se ejecutan y se obtiene un error de programación perdida.

El problema se agrava en el caso de que en el servidor haya más de un sitio web, ya que el número de peticiones se multiplica y puede provocar problemas en el servidor. Por ello, optimizar WP-CRON puede ayudarnos a reducir el consumo de CPU; además de que la web sea mucho más rápida, ya que no será necesario que se ejecuten las tareas programadas para atender las peticiones de los usuarios.

En el lado opuesto, otro de los grandes problemas de WP-CRON es que no se ejecute nunca. Esto puede ocurrir si se ha configurado un sistema de caché o se utiliza un CDN. Si la propia caché se encarga de atender las peticiones de los usuarios, no será necesario que lo haga WordPress y, por tanto, no existirá esa solicitud necesaria para que se ponga en marcha la ejecución de WP-CRON.

Alternativas a WP-CRON

WordPress no ofrece alternativa por defecto al uso de WP-CRON, pero dispone de multitud de plugins que pueden hacer esta tarea. A pesar de que WP-CRON sea a veces más problemático que útil, es necesario saber si la instalación está actualizada o si contamos con backups actualizados; por lo que es imprescindible que se realicen tareas programadas en cualquier sitio web.

Una buena opción puede ser WP-Control. Este plugin se encarga no solo de ejecutar crons, sino que permite consultar de forma sencilla la información sobre las tareas que se han programado; así como crear tareas nuevas o modificar o eliminar las que ya no sean necesarias. De esta forma se continuarán ejecutando estas tareas pero sin afectar al rendimiento de tu web.