El CRON de WordPress (WP-CRON)
Categoría:
Desarrollo web para WordPress, WordPress, Soporte y Ayuda, WPO
Fecha:
25/07/2022
Antes de empezar a escribir este post, ya lo puedo definir como una guía completa del CRON de WordPress y todas sus funcionalidades.
Para ejecutar tareas programadas o periódicas, WordPress implementa un CRON virtual ejecutado con cada visita mediante el wp-cron.php.
Esto es algo bueno y malo:
Como puedes ver, el wp-cron.php de WordPress tiene ventajas y desventajas, pero para que nuestro WordPress funcione de manera adecuada, las tareas programadas deben ejecutarse correctamente.
Vamos a empezar con la guía ;)
Si tuviéramos que resumirlo, podríamos decir que el CRON de WordPress sirve para ejecutar las tareas programadas. Pero a mí me gusta que veas la parte práctica de las cosas.
Si WordPress no tuviese un CRON virtual, tendrías que configurar el CRON de Linux manualmente. De lo contrario, si el CRON no estuviese ejecutando tareas programadas, ciertas funcionalidades a las que estamos acostumbrados dejarían de funcionar:
Al final, el WP-CRON de WordPress es utilizado por muchísimos plugins para ejecutar tareas y hacer posible que tengamos ciertas funcionalidades.
Voy a ponerte varios ejemplos aún más específicos que los anteriores:
Esto solo son ejemplos pero, al igual que el API Heartbeat (admin-ajax.php), el WP-CRON de WordPress es una de las funcionalidades que nos permiten tener ciertas comodidades, aunque mucha gente no sabe que existe.
Aunque el WP-CRON es una de las grandes ventajas de WP, también tiene desventajas.
Siendo sinceros, la ejecución de un pseudo-cron en cada clic es una forma de simplificar la implementación para usuarios que no tienen los suficientes conocimientos técnicos. No obstante, no es la forma más optimizada de hacerlo.
¿Te ha quedado claro? Precisamente por la única desventaja que tiene el WP-CRON de WordPress es la razón por la que se suele desactivar la ejecución continua del archivo wp-cron.php para lanzar su ejecución periódica y programada mediante el CRON de Linux.
Antes de nada quiero decir que yo recomiendo desactivar el CRON de WP, lo que no significa que tengas que borrar el wp-cron.php (no se hace así).
Precisamente lo digo porque me suelo encontrar instalaciones con problemas por tener el wp-cron.php borrado debido a que al seguir una guía lo hicieron así.
Realmente lo que buscamos no es desactivar el WP-CRON, sino cambiar el modo de ejecución para que sea más eficiente.
Vamos a desactivar la ejecución continua del archivo wp-cron.php con cada clic y hacer que se ejecute de forma periódica a través del CRON del servidor o hosting.
El proceso realmente es sencillo, pero hay que seguir estos pasos en este orden exacto.
Lo primero que debemos hacer es evitar que WP ejecute con cada "hit" el wp-cron.php para comprobar si hay tareas programadas.
Para esto existe un parámetro que introducimos en el wp-config.php de WP y automáticamente se desactiva la ejecución continua del wp-cron.php.
¿No sabes dónde añadir el parámetro dentro del wp-config.php? Pues realmente hay varias posiciones recomendadas, pero a mí me gusta ponerlo debajo del "DB_COLLATE" de la base de datos.
Con esto, ya tendremos la ejecución continua del WP-CRON desactivada. Ahora debemos hacer que se ejecute mediante el CRON de Linux.
Esta parte del proceso es indispensable, pero al mismo tiempo es variable. Dependiendo de tu hosting y del panel de control que utilice tu hosting, la interfaz para introducir tareas CRON al servidor puede variar bastante.
Como este es el blog de Raiola Networks, el proceso lo vamos a hacer en un cPanel de un hosting nuestro.
En cPanel debemos ir a buscar "Tareas cron" o "Cron tasks", dependiendo del idioma en el que tengas configurado el panel.
Una vez que entramos a esta parte, veremos algo similar a esto en nuestra pantalla:
Ahora debemos poner esta línea dentro del campo "Comando":
Debes cambiar el "dominiodeejemplo" por tu propio dominio. El resto es exactamente igual.
En el resto de campos, yo lo dejaría así para que se ejecute el WP-CRON mediante el wp-cron.php cada 5 minutos:
Ya habremos cambiado el modo de ejecución del WP CRON de nuestro WordPress.
Ahora que hemos cambiado el modo en el que se ejecuta el WP CRON, vamos a comprobar que se está ejecutando correctamente.
Ya no se ejecutará con cada visita, por lo que para revisar si funciona debemos tenerlo en cuenta y esperar el periodo de tiempo correspondiente. Si has seguido los pasos de este post, un máximo 5 minutos.
¿Cómo podemos comprobar la ejecución? Pues con un simple plugin.
Aunque existen varias formas de hacerlo, a mí me gusta "loggear" las ejecuciones viendo si se quedan en espera.
Para esto, voy a utilizar el plugin gratuito Advanced CRON Manager: https://es.wordpress.org/plugins/advanced-cron-manager/
Debes fijarte en la columna marcada, ya que es donde vas a poder ver si se está ejecutando correctamente el CRON. Lo que ves en la imagen es una instalación donde el WP CRON se está ejecutando correctamente.
Si hay muchas tareas pendientes con el contador a 0, es decir, que ya no marca tiempo para la siguiente ejecución, el CRON no se ha ejecutado. Si pasan más de 5 minutos (el tiempo que hemos configurado), el WP-CRON está fallando y no se está ejecutando con el CRON de Linux.
Si las tareas se van quedando apiladas sin volver a encolarse y sin salir el contador de tiempo, el wp-cron.php no se está ejecutando de ninguna manera y debemos revisar el paso 2 de este post para ver qué ha pasado.
Como son procesos técnicos, te recomiendo que hables con tu webmaster o incluso con tu proveedor de hosting, ya que normalmente el soporte puede ayudarte a configurar una tarea CRON en tu servidor.
¿Quieres ver las tareas programadas cargadas en el WP-CRON? Pues ya lo acabas de hacer si has seguido los pasos anteriores, ya que los plugins utilizados son más o menos los mismos que para comprobar si el CRON se está ejecutando correctamente.
Puedes hacerlo con el plugin Advanced CRON Manager:
Como puedes ver, Advanced CRON Manager te permite ver tanto las tareas programadas como las programaciones.
Por si no lo apuntaste antes, puedes encontrar más información de Advanced CRON Manager aquí: https://es.wordpress.org/plugins/advanced-cron-manager/
Otro plugin que te permite hacer esto es WP Crontrol:
Si quieres más información sobre WP Crontrol, puedes encontrarla aquí:
Y, por último, también está el plugin gratuito Cron Jobs:
Puedes encontrar más información sobre Cron Jobs aquí: https://es.wordpress.org/plugins/leira-cron-jobs/
Todos estos plugins no solo te permiten ver las tareas programadas configuradas en tu WordPress, sino que también puedes modificarlas o añadir nuevas (o incluso añadir nuevas programaciones):
Para usuarios avanzados, el hecho de poder editar y añadir nuevas tareas programadas puede ser muy útil durante el mantenimiento o resolución de problemas en sitios web.
Es normal que muchos plugins, al desinstalarse, dejen las tareas programadas en el CRON de WordPress.
Realmente, los elementos que se ejecutan mediante el wp-cron.php se encuentran en una fila dentro de la tabla wp_options de nuestro WP.
Existen muchos plugins que pueden detectar qué plugins han sido desactivados o desinstalados y qué tareas programadas han quedado registradas en el WP-CRON.
Evidentemente, estas tareas "fantasma" son un consumo de recursos inútil (mínimo, pero inútil). Lo ideal es borrarlas para evitar que estén ahí ejecutándose sin sentido.
Yo suelo recomendar el plugin Advanced Database Cleaner Pro. Sin embargo, no es el único.
La principal ventaja de Advanced Database Cleaner Pro es que detecta los CRON y te dice a qué plugin pertenecen y en base a eso comprueba si están activados.
Usuarios con más experiencia en WP y más conocimientos pueden utilizar otros plugins, como el que hemos visto anteriormente:
Como he dicho antes, aunque el impacto de los CRON "fantasma" es mínimo, instalaciones con muchos años encima y mucho "trote" pueden ser un caos si no hacemos una limpieza de base de datos y de CRONs de vez en cuando.
Las programaciones perdidas por culpa de que no se ejecuta el WP-CRON en WordPress son uno de los problemas de los que la gente se suele quejar.
En algunas ocasiones pueden fallar los posts programados, es decir, que no se publican porque falla la tarea programada.
Esto puede ocurrir por dos razones:
En base a estas dos afirmaciones, ya sabes cómo solucionarlo.
Para ejecutar tareas programadas o periódicas, WordPress implementa un CRON virtual ejecutado con cada visita mediante el wp-cron.php.
Esto es algo bueno y malo:
- Ventaja: WordPress puede ejecutar tareas programadas o periódicas sin necesidad de ninguna configuración avanzada.
- Desventaja: El wp-cron.php de WordPress se ejecuta con cada visita para comprobar si existen tareas para ejecutar, lo que consume recursos (sobre todo en instalaciones complejas, sin cache de página y con mucho tráfico).
Como puedes ver, el wp-cron.php de WordPress tiene ventajas y desventajas, pero para que nuestro WordPress funcione de manera adecuada, las tareas programadas deben ejecutarse correctamente.
Vamos a empezar con la guía ;)
Índice del artículo
- ¿Para qué sirve el CRON de WordPress?
- Ventajas y desventajas del CRON de WordPress
- Desactivar el CRON de WordPress
- 1 - Desactivar la ejecución del wp-cron.php con cada visita
- 2 - Añadir la tarea programada al CRON de Linux
- 3 - Comprobar la ejecución del CRON en WordPress
- Ver tareas del CRON de WordPress
- Limpiar el CRON de WordPress
- Programaciones perdidas en WordPress
¿Para qué sirve el CRON de WordPress?
Si tuviéramos que resumirlo, podríamos decir que el CRON de WordPress sirve para ejecutar las tareas programadas. Pero a mí me gusta que veas la parte práctica de las cosas.
Si WordPress no tuviese un CRON virtual, tendrías que configurar el CRON de Linux manualmente. De lo contrario, si el CRON no estuviese ejecutando tareas programadas, ciertas funcionalidades a las que estamos acostumbrados dejarían de funcionar:
- Dejarían de funcionar las actualizaciones automáticas del núcleo, plugins y themes.
- No se harían las copias de seguridad automáticas mediante ciertos plugins.
- WooCommerce no tendría estadísticas ni tampoco funcionarían bien los pedidos.
- Los plugins de membresías y suscripciones dejarían de funcionar.
- Los plugins de estadísticas o recuperación de datos estadísticos mediante APIs dejarían de funcionar, incluidas funcionalidades de plugins como RankMath SEO.
Al final, el WP-CRON de WordPress es utilizado por muchísimos plugins para ejecutar tareas y hacer posible que tengamos ciertas funcionalidades.
Voy a ponerte varios ejemplos aún más específicos que los anteriores:
- El plugin Broken Link Checker usa el WP-CRON para ejecutar los análisis programados cada cierto tiempo y también para ejecutar por lotes cuando hay muchos enlaces para comprobar.
- El plugin WP Rocket utiliza el CRON de WordPress para determinar el tamaño del cache guardado en el directorio correspondiente y también para la funcionalidad de Unused CSS mediante API externa.
- El plugin Elementor utiliza una tarea programada para enviar datos estadísticos a los desarrolladores.
Esto solo son ejemplos pero, al igual que el API Heartbeat (admin-ajax.php), el WP-CRON de WordPress es una de las funcionalidades que nos permiten tener ciertas comodidades, aunque mucha gente no sabe que existe.
Ventajas y desventajas del CRON de WordPress
Aunque el WP-CRON es una de las grandes ventajas de WP, también tiene desventajas.
- Ventajas: El CRON de WordPress nos proporciona un apoyo indispensable para los plugins y, al no requerir configuración, puede funcionar sin necesidad de que el usuario configure nada en el CRON del servidor o hosting.
- Desventajas: Precisamente para evitar que el usuario tenga que configurar nada en el CRON de Linux, el archivo wp-cron.php de WordPress se ejecuta con cada "hit" no cacheada al sitio web, lo que puede provocar sobrecargas y consumos de recursos innecesarios en el hosting o servidor.
Siendo sinceros, la ejecución de un pseudo-cron en cada clic es una forma de simplificar la implementación para usuarios que no tienen los suficientes conocimientos técnicos. No obstante, no es la forma más optimizada de hacerlo.
¿Te ha quedado claro? Precisamente por la única desventaja que tiene el WP-CRON de WordPress es la razón por la que se suele desactivar la ejecución continua del archivo wp-cron.php para lanzar su ejecución periódica y programada mediante el CRON de Linux.
Desactivar el CRON de WordPress
Antes de nada quiero decir que yo recomiendo desactivar el CRON de WP, lo que no significa que tengas que borrar el wp-cron.php (no se hace así).
Precisamente lo digo porque me suelo encontrar instalaciones con problemas por tener el wp-cron.php borrado debido a que al seguir una guía lo hicieron así.
Realmente lo que buscamos no es desactivar el WP-CRON, sino cambiar el modo de ejecución para que sea más eficiente.
Vamos a desactivar la ejecución continua del archivo wp-cron.php con cada clic y hacer que se ejecute de forma periódica a través del CRON del servidor o hosting.
El proceso realmente es sencillo, pero hay que seguir estos pasos en este orden exacto.
1 - Desactivar la ejecución del wp-cron.php con cada visita
Lo primero que debemos hacer es evitar que WP ejecute con cada "hit" el wp-cron.php para comprobar si hay tareas programadas.
Para esto existe un parámetro que introducimos en el wp-config.php de WP y automáticamente se desactiva la ejecución continua del wp-cron.php.
define('DISABLE_WP_CRON', true);
¿No sabes dónde añadir el parámetro dentro del wp-config.php? Pues realmente hay varias posiciones recomendadas, pero a mí me gusta ponerlo debajo del "DB_COLLATE" de la base de datos.
Con esto, ya tendremos la ejecución continua del WP-CRON desactivada. Ahora debemos hacer que se ejecute mediante el CRON de Linux.
2 - Añadir la tarea programada al CRON de Linux
Esta parte del proceso es indispensable, pero al mismo tiempo es variable. Dependiendo de tu hosting y del panel de control que utilice tu hosting, la interfaz para introducir tareas CRON al servidor puede variar bastante.
Como este es el blog de Raiola Networks, el proceso lo vamos a hacer en un cPanel de un hosting nuestro.
En cPanel debemos ir a buscar "Tareas cron" o "Cron tasks", dependiendo del idioma en el que tengas configurado el panel.
Una vez que entramos a esta parte, veremos algo similar a esto en nuestra pantalla:
Ahora debemos poner esta línea dentro del campo "Comando":
wget -q -O /dev/null -t 1 "https://tusitioweb.es/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
Debes cambiar el "dominiodeejemplo" por tu propio dominio. El resto es exactamente igual.
En el resto de campos, yo lo dejaría así para que se ejecute el WP-CRON mediante el wp-cron.php cada 5 minutos:
Ya habremos cambiado el modo de ejecución del WP CRON de nuestro WordPress.
3 - Comprobar la ejecución del CRON en WordPress
Ahora que hemos cambiado el modo en el que se ejecuta el WP CRON, vamos a comprobar que se está ejecutando correctamente.
Ya no se ejecutará con cada visita, por lo que para revisar si funciona debemos tenerlo en cuenta y esperar el periodo de tiempo correspondiente. Si has seguido los pasos de este post, un máximo 5 minutos.
¿Cómo podemos comprobar la ejecución? Pues con un simple plugin.
Aunque existen varias formas de hacerlo, a mí me gusta "loggear" las ejecuciones viendo si se quedan en espera.
Para esto, voy a utilizar el plugin gratuito Advanced CRON Manager: https://es.wordpress.org/plugins/advanced-cron-manager/
Debes fijarte en la columna marcada, ya que es donde vas a poder ver si se está ejecutando correctamente el CRON. Lo que ves en la imagen es una instalación donde el WP CRON se está ejecutando correctamente.
Si hay muchas tareas pendientes con el contador a 0, es decir, que ya no marca tiempo para la siguiente ejecución, el CRON no se ha ejecutado. Si pasan más de 5 minutos (el tiempo que hemos configurado), el WP-CRON está fallando y no se está ejecutando con el CRON de Linux.
Si las tareas se van quedando apiladas sin volver a encolarse y sin salir el contador de tiempo, el wp-cron.php no se está ejecutando de ninguna manera y debemos revisar el paso 2 de este post para ver qué ha pasado.
Como son procesos técnicos, te recomiendo que hables con tu webmaster o incluso con tu proveedor de hosting, ya que normalmente el soporte puede ayudarte a configurar una tarea CRON en tu servidor.
Ver tareas del CRON de WordPress
¿Quieres ver las tareas programadas cargadas en el WP-CRON? Pues ya lo acabas de hacer si has seguido los pasos anteriores, ya que los plugins utilizados son más o menos los mismos que para comprobar si el CRON se está ejecutando correctamente.
Puedes hacerlo con el plugin Advanced CRON Manager:
Como puedes ver, Advanced CRON Manager te permite ver tanto las tareas programadas como las programaciones.
Por si no lo apuntaste antes, puedes encontrar más información de Advanced CRON Manager aquí: https://es.wordpress.org/plugins/advanced-cron-manager/
Otro plugin que te permite hacer esto es WP Crontrol:
Si quieres más información sobre WP Crontrol, puedes encontrarla aquí:
Y, por último, también está el plugin gratuito Cron Jobs:
Puedes encontrar más información sobre Cron Jobs aquí: https://es.wordpress.org/plugins/leira-cron-jobs/
Todos estos plugins no solo te permiten ver las tareas programadas configuradas en tu WordPress, sino que también puedes modificarlas o añadir nuevas (o incluso añadir nuevas programaciones):
Para usuarios avanzados, el hecho de poder editar y añadir nuevas tareas programadas puede ser muy útil durante el mantenimiento o resolución de problemas en sitios web.
Limpiar el CRON de WordPress
Es normal que muchos plugins, al desinstalarse, dejen las tareas programadas en el CRON de WordPress.
Realmente, los elementos que se ejecutan mediante el wp-cron.php se encuentran en una fila dentro de la tabla wp_options de nuestro WP.
Existen muchos plugins que pueden detectar qué plugins han sido desactivados o desinstalados y qué tareas programadas han quedado registradas en el WP-CRON.
Evidentemente, estas tareas "fantasma" son un consumo de recursos inútil (mínimo, pero inútil). Lo ideal es borrarlas para evitar que estén ahí ejecutándose sin sentido.
Yo suelo recomendar el plugin Advanced Database Cleaner Pro. Sin embargo, no es el único.
La principal ventaja de Advanced Database Cleaner Pro es que detecta los CRON y te dice a qué plugin pertenecen y en base a eso comprueba si están activados.
Usuarios con más experiencia en WP y más conocimientos pueden utilizar otros plugins, como el que hemos visto anteriormente:
Como he dicho antes, aunque el impacto de los CRON "fantasma" es mínimo, instalaciones con muchos años encima y mucho "trote" pueden ser un caos si no hacemos una limpieza de base de datos y de CRONs de vez en cuando.
Programaciones perdidas en WordPress
Las programaciones perdidas por culpa de que no se ejecuta el WP-CRON en WordPress son uno de los problemas de los que la gente se suele quejar.
En algunas ocasiones pueden fallar los posts programados, es decir, que no se publican porque falla la tarea programada.
Esto puede ocurrir por dos razones:
- Tu web tiene muy poco tráfico y, al tener el wp-cron.php configurado de forma nativa, no llega a ejecutarse y, por lo tanto, no llegan a ejecutarse las tareas programadas.
- Has configurado el wp-cron.php para ejecutarse con el CRON de Linux y no has realizado el proceso correctamente.
En base a estas dos afirmaciones, ya sabes cómo solucionarlo.
Deja una respuesta
Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *